2017-05-23 1 views
1

私は、pythonでリストを使ってフィボナッチシリーズを印刷しようとしています。 この私のコードフィボナッチシリーズリストを使用しますか?

f=[1,1] 
for i in range(8): 
    f.append(f[i-1]+f[i-2]) 

print(f) 

出力は、私がここにバグを取得していない午前

[1, 1, 2, 3, 2, 3, 5, 5, 5, 8] 

です!

+0

は、何 'i'、' F'、 'fと、いくつかのデバッグ出力を追加することを検討[I-1] 'と' F [I- 2] 'がそれぞれのステップにあります。 – bereal

+0

'i = 2'のときに何が起こるか考えてください。すでにリストに2回追加されていますが、追加する次の値は' f [0] + f [1] 'です。 – asongtoruin

+0

。あなたはリスト内のインデックス2から開始するので、ループを開始する必要があります。つまり、 'range(2,8)' –

答えて

3

Pythonのrangeが0から始まる場合、要素2を生成する必要があります。0から始めると、最初の2つの計算の負のインデックスが得られます。これはリストの最後からアクセスします。これを修正するには、ループをfor i in range(2, 8)に変更します。その時点から

f[2] = f[0-1] + f[0-2] = f[-1] + f[-2] (= f[1] + f[0]) = 1 + 1 = 2 # looking good 
f[3] = f[1-1] + f[1-2] = f[0] + f[-1] (= f[0] + f[2]) = 1 + 2 = 3 # looking good 
f[4] = f[2-1] + f[2-2] = f[1] + f[0] = 1 + 1 = 2     # oops! 
f[5] = f[3-1] + f[3-2] = f[2] + f[1] = 2 + 1 = 3 

は、ゼロでrangeを開始し、次の用語が加算され、リストに追加された状態で終わる負のインデックスを使用して混乱の源であると思われるものを明確にするに数字上の軌道に乗っているが、2

+0

インデックスのエラーが表示されない理由は-1と-2はリストの最後から1番目と2番目の値を返します。 – Green

+0

@Greenよかった、ありがとう。 – pjs

+2

@Greenなので、実際には範囲の制限にかかわらず、 'f.append(f [-1] + f [-2])'で実際にうまくいくはずです。 – bereal

1
f=[1,1] 

for i in range(8): 
    f.append(f[i]+f[i+1]) 

print(f) 

結果から、適切なインデックスからのオフセット

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 
+0

@Chaitanya Patil >> f.append(f [i-1] + f [i-2])<< f [i-2] - > f [i + 1]を変更しました –

0

開始点を明示的に指定しないと、range関数は0から始まることに注意してください。あなたの場合は、それはfor i in range(2, 8)でなければなりません。

出力:

[1, 1, 2, 3, 5, 8, 13, 21] 

また、Pythonでは、あなたはこの奇妙な結果を持っていた理由です、左の代わりに右からカウントするように配列に負のインデックスを使用することができます。 PJS'の答えに追加

+0

Thanq :-)それを得た –

0

i = 0、あなたは-1のインデックスはようにあなたのリストの最後の要素を与え、どこ、f[-1]f[-2]を追加しています。

これを修正するには、他の回答がすでに指摘しているように、range()の正しい開始点を設定する必要があります。

1
f=[1,1] 
for i in range(8): 
    s=len(f) 
    f.append(f[s-1]+f[s-2]) #sum of last two elements 

print(f) 

または-1と-2を最後の2つの要素のインデックスとして使用します。

0

スクリプト

f=[1,1] 

for i in range(2,8): 
    print(i) 
    f.append(f[i-1]+f[i-2]) 
    print(f) 

出力

2 
[1, 1, 2] 
3 
[1, 1, 2, 3] 
4 
[1, 1, 2, 3, 5] 
5 
[1, 1, 2, 3, 5, 8] 
6 
[1, 1, 2, 3, 5, 8, 13] 
7 
[1, 1, 2, 3, 5, 8, 13, 21] 

問題は、第8フィボナッチ数を表し、2〜8の範囲を使用して0からi開始、f[-1], f[-2]戻り0 開始あります。

デバッグプリントを除去

スクリプト

f=[1,1] 

for i in range(2,8): 
    f.append(f[i-1]+f[i-2]) 
print(f) 
+0

ありがとう!とった :-) –

関連する問題