Python 为什么在执行代码(1)时会导致最大递归限制错误,而在执行代码(2)时不会导致错误
下面是使用递归函数的Fibonacci系列的2个python代码。我想知道这些代码之间的区别,以及为什么代码(1)不工作,而代码(2)工作时没有任何错误 这不起作用,并显示最大递归限制的错误:Python 为什么在执行代码(1)时会导致最大递归限制错误,而在执行代码(2)时不会导致错误,python,recursion,fibonacci,Python,Recursion,Fibonacci,下面是使用递归函数的Fibonacci系列的2个python代码。我想知道这些代码之间的区别,以及为什么代码(1)不工作,而代码(2)工作时没有任何错误 这不起作用,并显示最大递归限制的错误: def f(n): return f(n-1) + f(n-2) n=8 f(n) 鉴于此项工作: def f(n): if n == 0: return 0 if n == 1: return 1 else: return f(n-1) +
def f(n):
return f(n-1) + f(n-2)
n=8
f(n)
鉴于此项工作:
def f(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return f(n-1) + f(n-2)
f(4)
您的第一个代码无法停止。它没有n==0或n==1的基本情况,因此它将以负数无限向下继续 如果您添加:
if n <= 1:
return 0
这更好,因为你在任何时候只记住两个数字。因为你的递归没有中断条件,它会递归成无穷多个问题,像这样的问题很容易通过自己调试代码来回答-在这里阅读:查看这个可爱的博客寻求帮助。是的,几秒钟前我找到了原因,但是非常感谢你的时间和耐心。
from functools import lru_cache
@lru_cache(maxsize=None)
def fib2(n):
if n <= 1:
return n
else:
return fib2(n-1) + fib2(n-2)
def fib3(n):
if n == 0:
return 0
f1 = 0
f2 = 1
for i in range(n-1):
f1,f2 = f2, f1+f2
return f2