2014-04-15 110 views
1
def make_fibonacci(n): 
    if n == 0: 
     return (0,) 
    count = 1 
    while n > count: 
     a , b = 0, 1 
     c = a +b 
     a,b = b,c 
     count += 1 
     return (b,c) 
    return (0,) + (b,c) 

這是我的代碼,我無法獲得所需的輸出。使斐波那契組成

make_fibonacci(5) 

(0, 1, 1, 2, 3, 5) 

什麼是錯?

+0

這是希望的或實際輸出? –

+0

這是所需的輸出,實際輸出是'(1,1)' –

+0

你想寫一個_recursive_實現,但最後寫了... – devnull

回答

0

使用像這樣的

def make_fibonacci(n): 
    if n == 0: 
     return (0,) 
    count = 1 
    x = [0] 
    a, b = 0, 1 
    while n >= count: 
     count += 1 
     a, b = b, a+b 
     x += [a] 

    return tuple(x) 

if __name__ == '__main__': 
    print make_fibonacci(5) 

輸出爲:

(0, 1, 1, 2, 3, 5) 
2

while循環中您有一個return,因此它當然不會迭代。

它看起來就像你想做某事遞歸的,但你沒有真正遞歸部分,即從內部調用自身make_fibonacci()

我會推薦刪除元組的想法,而是專注於構建一個普通的舊數字列表,然後在完成時轉換爲元組。

0

這裏是你的代碼的簡化版本,它不需要recursion

def make_fibonacci(n): 
    result = [0,1] 
    if n < 1: 
     return [0] 
    count = 1 
    while count < n: 
     count += 1 
     result.append(result[-1]+result[-2]) 
    return result 

>>> print make_fibonacci(5) 
[0, 1, 1, 2, 3, 5] 
+0

他沒有要求那個,我確定有很多在谷歌上也可以找到解決方案,但這些解決方案在這裏並不重要 –