[英]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.