2016-04-27 36 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 

爲什麼我得到兩個不同的結果?是什麼讓python打印2個不同的輸出。目前我正在使用python 3在python中打印斐波那契數列的正確方法是什麼

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

在第一個示例中,您將在添加b之前更改a的值。 – Selcuk

回答

0

第一個總是試圖用b更新,以及下一個做B中2B

第二執行一次全部更新,所以你應該能夠精細執行它。取而代之的是採用第一種方法,您可以按照以下步驟進行:

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

第一個你需要另一個變量作爲中間值。 在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 

第一個設置ab。因此,在計算a+b時,它實際上變爲b+b2*b,這就是您看到加倍序列的原因。

完成總和的第二種方法是一次加起來並更新所有內容。

0

每次迭代需要更新ab如下:

new_a = old_b 
new_b = old_a + old_b 

但你必須要小心,不要重新分配從舊的迭代變量中的一個將其用於新的迭代的值之前。例如:

a = b 
b = a + b 

這正常更新a,但現在的a舊值不再可用,並b最後還是會new_a + old_b,這是一樣的old_b + old_b。所以它不起作用。同樣,您不能在a之前更新b,因爲舊的值b將不再可用。

一種解決方案是使用一個臨時變量來保存的舊值:

t = a 
a = b 
b = t + b 

另一種解決方案,您正在使用的,是同時更新這兩個值:

a,b = b,a+b 

這首先捕獲ba+b的值,然後再更改任何內容。然後它將這些值分配給ab