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) +

下面是使用递归函数的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) + 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