簡體   English   中英

Python中遞歸函數的斐波那契數列

[英]Fibonacci series by recursive function in Python

您好,我正在嘗試通過在 python 中使用遞歸函數來生成斐波那契數列。

這是我的代碼

def fibolist(n):
    list1 = [1, 1]
    if n in (1,2) :
        return list1
    else:
        fibolist(n-1).append(sum(fibolist(n-1)[n-3:]))
        return list1

但是當我輸入任何數字作為參數時,結果是[1, 1]你能幫我嗎?!

你開始

list1 = [1, 1]

您永遠不會更改該值,然后將其返回到調用例程。

fibolist每次調用都有一個名為list1的局部變量; 追加到一個改變list1中調用程序價值。 你需要明確地這樣做。 嘗試

else:
    return fibolist(n-1) + [sum(fibolist(n-1)[n-3:])]

只是為了修復您的代碼:

def fibolist(n):
    if n in (0,1) :
        return [1,1]
    else:
        return fibolist(n-1)+[sum(fibolist(n-1)[n-2:])]

幾點注意事項:

python中的列表有起始索引= 0,所以最好從它開始(除非你想把 start return 到[0,1,1] for n in (1,2) )。

另外 - 正如已經提到的,你不應該返回局部變量,你每次都預先分配。

您的代碼不會更新從遞歸返回時返回的 list1 變量。 執行fibolist(n-1).append(...)更新下一級返回的列表,但這是一個單獨的列表,因此list1不受影響。

您還可以通過將最后兩個值傳遞給自身來使您的函數更簡單:

def fibo(n,a=1,b=1): return [a] if n==1 else [a] + fibo(n-1,b,a+b)

順便說一句,斐波那契數列的現代解釋從 0,1 而不是 1,1 開始,所以上面的簽名應該是def fibo(n,a=0,b=1)

輸出:

print(fibo(5))
#[1, 1, 2, 3, 5]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM