最近プログラミングを勉強し始めた者です。
教科書とWebを使って勉強しているのですが、なかなか厳しいです。
初歩的な質問であると思いますがお許しください。
フィボナッチ数列の8番目の数字を再帰構造を用いて表示させるプログラムを作りました。
Sub saikikouzou()
n = 8
Cells(1, 1) = keisan(n)
End Sub
Function keisan(n)
If n < 3 Then
keisan = 1
Else
keisan = keisan(n - 1) + keisan(n - 2)
End If
End Function
一般的にフィボナッチ数列と言われると「1.1.2.3.5.8.13.21」という数列であると理解しています。上記のプログラムもそのつもりで作成しました。
しかし今は「1.2.3.5.8.13.21.34」という数列の8番目を再帰構造を使って求めたいと考えています。
つまり、最初の数字を「1,1…」と始まるのではなく「1.2…」と始めたいのです。
私のプログラムだと、
If n < 3 Then
keisan = 1
の部分で最初の数字が「1.1」と決めているため、良くないことは理解できましたが、どうすれば「1.2…」と始められるかが分かりません。
まだこの単元を消化しきっていないため、質問内容もままならない点がありますが、ご理解できましたら是非回答をよろしくお願いします。
No.2ベストアンサー
- 回答日時:
keisan(n)に、初項、第2項を追加して渡す、というのはいかがでしょう?
#蛇足ながら、この場合、再帰構造を使用しないほうがよいのですが。
#計算量がnの2乗のオーダーで増えますから。
#(計算回数はフィボナッチ数列そのもの?)
Sub saikikouzou()
n = 8
'a1=Cells(2, 1)
'a2=Cells(2, 2)
a1=1
a2=2
Cells(1, 1) = keisan(n,a1,a2)
End Sub
Function keisan(n,a1,a2)
If n = 1 Then
keisan = a1
Else
If n = 2 Then
keisan = a2
Else
keisan = keisan(n - 1) + keisan(n - 2)
End If
End If
End Function
ご回答どうもありがとうございます。
Function keisan(n,a1,a2)
という発想は無かったのでとても参考になりました。
只今、実行してみましたところ、コンパイルエラーで「引数が省略されている」と出てしまいましたが、何とか自分でもこのエラーは解消できるように努力してみます。
このことに関して、引き続きご教授の方も受け付けております。
とても参考になりました。
ありがとうございました。
No.3
- 回答日時:
しまった。
内部でも関数を呼び出していたのでした。>コンパイルエラーで「引数が省略されている」
引数は普通、省略不可能ですので、言い換えれば「必要な個数の引数が指定されていません」ということでして。
>keisan = keisan(n - 1) + keisan(n - 2)
正しくは以下のとおりです。(きっと・・(汗))
keisan = keisan(n - 1,a1,a2) + keisan(n - 2,a1,a2)
ありがとうございました。
なるほど、エラーはそういうことを言っていたんですね!
日々勉強です。
とても参考になりました。
お世話になりました。
No.1
- 回答日時:
If n < 3 Then
↓
If n < 2 Then
1番目からじゃなく、0番目から始めれば8番目は34になります。
この回答への補足
ご回答ありがとうございます。
恐れ入りますが、
If n < 3 Then
keisan = 1
この部分で「もしも~~の場合、1と2を~~に入れる」のような記述は出来ないものでしょうか?
と言うのも、実を申しますと将来的にシートの読み込みをさせたく、任意の2つの数字を入れるとフィボナッチ風(?)の数列を発生させるようにすると面白いかな、と勝手に考えています。
このようなことをするためには、まず上記の部分で「○○=1 ○○=2」のような書き方にするのが第一歩目かな、と考えたのですが考え方は的外れでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
xlookup関数の引数を利用して検...
-
VBAにて『元に戻すボタン』を作...
-
select caseの入れ子
-
マクロの「SaveAs」でエラーが...
-
VBAマクロ実行時エラーの修正に...
-
Worksheets メソッドは失敗しま...
-
エクセル マクロ オートフィ...
-
B列の最終行までA列をオート...
-
エクセルVBA 配列からセルに「...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBA シートをコピーする際に Co...
-
結合されたセルをプルダウンの...
-
「段」と「行」の違いがよくわ...
-
エクセルで離れた列を選択して...
-
エクセルで複数のシートのクリ...
-
LEFT関数とIF関数の組み合わせ...
-
エクセルで特定の文字列が入っ...
-
vbaで指定したセルより下の行を...
-
VBA 指定した列にある日時デー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あああ..ああい..ああう とい...
-
VBAバーコード照合 バーコード...
-
VBAにて『元に戻すボタン』を作...
-
select caseの入れ子
-
vbs 文字位置を中央に
-
エクセルで選択したセルがディ...
-
xlookup関数の引数を利用して検...
-
再帰構造のアルゴリズムで困っ...
-
エクセルを開いたらカウントし...
-
スペース区切りのAND検索
-
日付け関数について
-
targetでクリックしたら○
-
VBAにて文字列の長さを取得...
-
1つのテーブルに重複している列...
-
半透明ブラシ重ね塗りのアルゴ...
-
C++で、b[bit]の非負整数(例え...
-
VBAマクロ実行時エラーの修正に...
-
エクセルで特定の文字列が入っ...
-
マクロの「SaveAs」でエラーが...
-
VBA シートをコピーする際に Co...
おすすめ情報