我有两个函数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