フィボナッチ数列《繰返し処理と値の更新》
フィボナッチ数列《繰返し処理と値の更新》
※画面サイズにより、説明が下に表示される場合があります。
■フィボナッチ数列は、次の漸化式で定義される:
F0 = 0, F1 = 1, Fn+2 = Fn + Fn+1 (n ≥ 0)
◆《方針》今回は初項=1,第2項=1として考える。(上の定義では初項=0,第2項=1)初項と第2項の配列を準備し、繰り返し処理でフィボナッチ数を追加していく。
〈ステップ〉
1:初項と第2項を変数a、bに代入し、それを配列fibの要素とする。
2:第3項を配列fibに追加する。
3:第3項以降は繰り返し処理により追加されるようにする。例えば10回繰り返すにはfor i range(0,10) などとする。…この方法では、a+bの値を10回配列に加えているだけ。aとbが更新されないとフィボナッチ数列にならない。
□【POINT】どのようにしたらa、bまたはa+bが更新されるようになるか
初項(a)は1、第2項(b)も1、第3項は初項+第2項なので(a+b)だが、第4項は第2項(b)+第3項(a+b)であるから{b+(a+b)}となる。つまり、第4項を求める前の段階でaにbを代入し、bには(a+b)を代入する必要がある。
4:第4項を求める前の段階でaにbを代入し、bには(a+b)を代入する。これもフィボナッチ数列ではない。問題はどこにあるか?
プログラムは基本的に順次処理をするため、a=bを実行するとaにはbの値が代入される。次の行でa+bをbに代入すると、b+bの値が入力されていることになる。aにbを代入し、bにもともとのa+bを代入するには、aの値をa+bを実行するまで保持する必要がある。
5:a、bとは異なる変数cに一時的にaの値を代入しておき、aにbの値を代入し、bにc+bを代入する。(このc+bはbの値が代入される前のaとbの和)
このコードでは第3項から10回繰り返すので第12項までのフィボナッチ数列となっている。