2016-04-27 14 views
1
def fibonacci(n): 
a = 0 
b = 1 
for i in range(n): 
    a=b 
    b=a+b 
    print(a,end = " ") 

fibonacci(10) 

Result = 1 2 4 8 16 32 64 128 256 512 

なぜ2つの異なる結果が得られますか?何がoutputs.Currently私は、Python 3Pythonでフィボナッチシーケンスを印刷する正しい方法は何ですか

def fibonacci(n): 
a,b = 0,1 
for i in range(n): 
    a,b=b,a+b 
    print(a,end = " ") 

fibonacci(10) 

Result = 1 1 2 3 5 8 13 21 34 55 

Why i am getting two different results ? what makes the python to print 2 different outputs.Currently i am using python 3. 
+1

最初の例では、aの値をbで追加する前に変更しています。 – Selcuk

答えて

0

最初のものは常に秒をBと更新しようとすると、次の1は図2b

としてBを作るあなたは罰金それを実行することができるはずですので、一度にすべての更新を行います。最初の方法を使用する代わりに、次のようにすることができます。

for i in range(n): 
    print(b) 
    b=a+b 
    a=b-a 
0

あなたが中間体として別の変数を必要とする最初のものを使用しています別の2を印刷するのpythonになります。 のpython

a,b = b, a+b is equal to 
c = b 
b = a +b 
a = c 
1

に違いは、合計を行う方法です。

a,b=b,a+b 

a=b 
b=a+b 

最初のものはbaを設定します。したがって、a+bが計算されるまでには、実際にはb+bまたは2*bになり、倍化シーケンスが表示されます。

合計を実行する2番目の方法は、すべてをまとめて一括して更新します。

0

各繰り返しは、次のようにabを更新する必要があります。

new_a = old_b 
new_b = old_a + old_b 

をしかし、あなたは新しい反復の値のためにそれを使用する前に、古いの反復からの変数のいずれかを再割り当てしないように注意する必要があります。たとえば、次のように

a = b 
b = a + b 

これが正しくa更新していないが、今aの古い値が使用できなくなった、とbold_b + old_bと同じであるnew_a + old_bを取得してしまいます。それで、うまくいきません。同様に、bの前の値がbに更新されないため、aの前にbを更新することはできません。

一つの解決策は、古い値を保持するために一時変数を使用することです:あなたが使用している

t = a 
a = b 
b = t + b 

別の解決策は、同時に両方の値を更新することです:

a,b = b,a+b 

これは、何かが変更される前に、ba+bの値を最初にキャプチャします。それらの値をabに割り当てます。

関連する問題