2014-10-02 69 views
0

我試圖讓下面的代碼斐波那契序列:斐波那契序列乘以

def fibonacci(n): # write Fibonacci series up to n 
    """Print a Fibonacci series up to n.""" 
    a = 0 
    b = 1 
    the_list = [] 
    while n > len(the_list): 
     the_list.append(a) 
    #By saying a = b and b = a+b we define the 
    #fibonacci sequence, since this is how the 
    #fibonacci sequence works. 
     a = b 
     b = a+b 
    print the_list 
# Now call the function we just defined: 
fibonacci(10) 

據我知道這個代碼應該這樣做,但不是給我的斐波那契序列的給下面的輸出:

[0, 1, 2, 4, 8, 16, 32, 64, 128, 256] 

所以我斐波那契數列是乘法而不是正確的工作。我不知道爲什麼,因爲我想

a = b 
b = a+b 

應該做的伎倆,如果我看我while循環這個循環中的語句也是正確的,所以我只是不明白,爲什麼我沒有得到正確的輸出。

因此,如果有人可以解釋我爲什麼這個代碼不工作這將是非常appriciated

+0

想想每次迭代時發生了什麼。 'a'正被分配'b'的值,然後'b'被設置爲'a' +'b'。從'b = 1'的迭代開始,您將首先設置'a = 1',然後設置'b = a + b = 1 + 1 = 2'。 – 2014-10-02 23:09:14

回答

1

您的代碼,因爲一個邏輯漏洞創建一個指數序列。基於您的代碼:

Start: 
a = 0 
b = 1 

1st iteration: 
a = b = 1 
b = a + 1 = 1 + 1 = 2 

2nd iteration: 
a = b = 2 
b = a + 2 = 2 + 2 = 4 

正如你可以看到,您在執行b計算使你的問題之前設置a的事實。

相反,你需要將類似(爲了證明這一點):

tmp = a 
a = b 
b = tmp + a 

一點點額外的數學就不再需要爲額外的變量:

b += a 
a = b - a 

但最簡單的(也是最pythonic)的方式是:

a, b = b, a + b