如何解决RecursionError: maximum recursion depth exceeded in comparison错误?
问题分析
你的代码触发RecursionError的核心原因是递归逻辑形成了无限循环,拆解计算f(5)的过程就能看清:
- 计算
f(5)→ 调用f(4 + f(2)),需要先算f(2) - 计算
f(2)→ 调用f(1 + f(-1)),其中f(-1)满足n<=0,返回1 - 此时
f(2)变成调用f(1+1)=f(2),形成无限递归:f(2)持续调用自身,永远触达不到终止条件,最终超过Python默认的递归深度限制(默认1000)
修正方案
从代码结构判断,你大概率是写错了递归式的符号——应该是返回两个递归调用的和,而非把第二个递归的结果作为第一个递归的参数。修正后的代码如下:
def f(n): if n <= 0: return 1 else: # 将原代码的f(n-1 + f(n-3))改为f(n-1) + f(n-3) return f(n-1) + f(n-3) print(f(5)) # 输出:9
手动验证计算过程
修正后f(5)的计算步骤:
f(-1)=1,f(0)=1f(1)=f(0)+f(-2)=1+1=2(f(-2)满足n<=0,返回1)f(2)=f(1)+f(-1)=2+1=3f(3)=f(2)+f(0)=3+1=4f(4)=f(3)+f(1)=4+2=6f(5)=f(4)+f(2)=6+3=9
如果你的原始需求确实是f(n) = f(n-1 + f(n-3)),那这个函数对n≥2的情况都会陷入无限递归,这种逻辑本身不具备可计算性,需要重新设计递归规则。
内容的提问来源于stack exchange,提问作者MrCyman2
相关产品推荐
相关产品推荐

