我有兩個函數fib1
和fib2
來計算斐波納契。python 2.7 - 遞歸斐波那契爆炸
def fib1(n):
if n < 2:
return 1
else:
return fib1(n-1) + fib1(n-2)
def fib2(n):
def fib2h(s, c, n):
if n < 1:
return s
else:
return fib2h(c, s + c, n-1)
return fib2h(1, 1, n)
fib2
直到它炸燬遞歸限制正常工作。如果理解正確,Python不會針對尾遞歸進行優化。這對我來說很好。
什麼讓我是fib1
開始放緩,即使值很小的n
也停下來。爲什麼會發生?在它遲緩之前它怎麼沒有達到遞歸限制?
CPU時間:用戶0.35 S,SYS:0.00 s,共0.35小號 牆時間:0.35小號......這就是花了多長時間我要'FIB1(30)'..似乎理由在Python 3中能夠使用 –
'fib2(30)',real:0m0.032s,user:0m0.025s,sys:0m0.006s。您使用的是什麼版本的Python? –
@JoranBeasley嘗試fib1(100) – JBoyer