なぜ-1をするのでしょうか?
第1項、第2項は既知なので、第n項を求める際の計算回数がn-2回で済むから。
1を引いているのはカウンタ変数iの初期値を1にしているからです。
これを最初から2にしてしまえば while i < count で充分な筈。
fib.append(fib[i] + fib[i-1])
i += 1 ここの処理で1.1.2.3.5.8の処理をしているのでしょうか?
iにどんな値が入っていて、fib[i]とfib[i-1]が何を指しているのか確認すると良いです。
Python
1def gen_fib():
2 count = 10 # とりあえず固定
3 i = 1
4
5 # elif count > 2:
6 fib = [1,1]
7 while i < (count - 1):
8 print(f'fib={fib}')
9 print(f'i={i}, fib[i]={fib[i]}, fib[i-1]={fib[i-1]}')
10 print()
11
12 fib.append(fib[i] + fib[i-1])
13 i += 1
14
15 print(f'return: {fib}')
16 return fib
17
18
19gen_fib()
実行結果 Wandbox
fib=[1, 1]
i=1, fib[i]=1, fib[i-1]=1
fib=[1, 1, 2]
i=2, fib[i]=2, fib[i-1]=1
fib=[1, 1, 2, 3]
i=3, fib[i]=3, fib[i-1]=2
fib=[1, 1, 2, 3, 5]
i=4, fib[i]=5, fib[i-1]=3
fib=[1, 1, 2, 3, 5, 8]
i=5, fib[i]=8, fib[i-1]=5
fib=[1, 1, 2, 3, 5, 8, 13]
i=6, fib[i]=13, fib[i-1]=8
fib=[1, 1, 2, 3, 5, 8, 13, 21]
i=7, fib[i]=21, fib[i-1]=13
fib=[1, 1, 2, 3, 5, 8, 13, 21, 34]
i=8, fib[i]=34, fib[i-1]=21
return: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
余談
ご提示のコードは、あんまり良いお手本になるようには見えません。
再帰処理を避けるとしても、次のように書くのがより簡潔ではないでしょうか。
Python
1def make_fib(cnt):
2 fib = [1, 1]
3 for _ in range(cnt-2):
4 fib.append(fib[-1] + fib[-2])
5
6 return fib[:cnt]
コードの書き方について
teratailには、コードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
特にPythonの場合、インデントが崩れるとコードの意味が変わってしまいます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/21 15:32 編集
2019/09/21 15:39
2019/09/21 15:40
2019/09/21 15:57
2019/09/21 21:46
2019/09/22 04:51
2019/09/22 06:59
2019/09/22 08:02 編集
2019/09/22 07:57
2019/09/22 08:02 編集
2019/09/22 08:12
2019/09/22 08:30