2015-02-17 23 views
0

我的任務是創建一個函數,該函數生成3個從0開始的斐波那契數列的數字列表。下面是我的代碼。如何修復python斐波那契序列腳本?

def fibList(n): 
    a = 0; b = 1; fibList = [] 
    if n <= 0: 
     return 
    elif n == 1: 
     fibList = [a] 
    elif n == 2: 
     fibList = [a,b] 
    else: 
     for i in range(0,n): 
      a, b = b, a + b 
      fibList.append(b) 

return fibList 


def main(): 
    print (fibList(4)) 
    print (fibList(10)) 
    print (fibList(-4)) 

我想我的輸出看起來像[0,1,1,2]爲4,[0,1,1,2,3,5,8,13,21,34,55 ]爲10,[]爲-4

我的問題從fibList(4)開始,當前給出的輸出爲[1,2,3,5],而fibList(10)給出[1,2, 3,5,8,13,21,34,55,89]和-4我得到「None」而不是[]。我得到[0]和fibList(2)我得到[0,1],但是當我測試fibList(3)時,第一個0和1丟失,給我[1,2 ,3] 我該怎麼做才能讓3以上的任何數字以[0,1,1,2 ...]開頭?我的主要問題是讓0和1成爲序列中的前兩個數字,並使fibList(-4)產生[]。 任何幫助或提示將不勝感激:-)

+0

fibanacci序列是0,1,1,2,3,5 ...你爲什麼跳過2? – Foon 2015-02-17 21:41:00

+0

那麼,對於'-4'的情況,你的裸機'return'相當於'return None',而不是'return []',因爲你聲明的是你想要的結果。而且,在'2'以上的任何情況下,您只是將列表中的b值附加到最初的空列表中(即您跳過前兩個元素),然後按@Foon提到的,您的對於任何一種正面情況的預期輸出似乎都是可疑的... – twalberg 2015-02-17 21:53:48

回答

0

所有你缺少的是在小於或等於零的情況下添加一個空列表,並正確地計算斐波納契數字範圍大於2 。使這些小的變化,像這樣:

def fibList(n): 

     if n <= 0: 
       fibnums = [] 
     elif n == 1: 
       fibnums = [0] 
     elif n >= 2: 
       fibnums = [0, 1] 
       for i in range(2,n): 
         fibnums.append(fibnums[i-1]+fibnums[i-2]) 
     return fibnums 

注意,此遞歸方法可以得到大量的很慢,如果是關心你和你的計劃。祝你好運!

有了這些變化,

print (fibList(4)) => [0, 1, 1, 2] 
print (fibList(10)) => [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] 
print (fibList(-4)) => [] 
+0

我做了這些更改,現在我一直得到「無效的語法」 – 2015-02-17 22:32:16

+0

@NicholasDePasquale您在哪一行得到無效的語法?它在運行python-3.x的機器上工作正常。 – HavelTheGreat 2015-02-17 22:33:47

0

你並沒有完全定義功能。結果列表應該有n個值[f(0),...,f(n-1)]還是n + 1個值[f(0),...,f(n)]?你的例子是矛盾的:4的'expected'輸出有4個以f(3)結尾的值,而10的有11個值以f(10)結尾。

我打算假設後者是正確的。這是您的快速迭代解決方案的修訂版本。 (如果我的假設是錯誤的,停止在n而不是n + 1的範圍。)

def fibs(n): 
    "Return [fib(0), ..., fib(n)." 
    ret = [0, 1] # fib(0), fib(1) 
    a, b = ret 
    if n <= 1: 
     return ret[:n+1] 
    else: 
     for i in range(2, n+1): 
     a, b = b, a+b # b = f(i) 
     ret.append(b) 
     return ret 

print(fibs(-4), fibs(0), fibs(2), fibs(4), fibs(10)) 

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