You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Python递归函数在997层而非1000层时抛出递归错误?

Python递归深度未达设定阈值就触发错误的原因
  • sys.getrecursionlimit()返回的1000是Python解释器允许的全局最大调用栈深度,不是给用户自定义递归函数预留的专属递归次数,这个计数包含了解释器启动后所有活跃的函数调用栈帧,包括脚本顶层执行、解释器内部调用占用的栈层数。
  • 你直接运行脚本时,初始调用栈已经占用了3个左右的栈帧,所以留给你自定义main函数的递归空间只有约997次,刚好和你遇到的报错时机吻合:从x=0开始递归到x=996时,总共调用了997次main,加上初始占用的栈层数刚好触碰到1000的阈值,因此抛出RecursionError。

你可以修改代码打印当前栈深度验证这个逻辑:

import sys
print(f"初始栈深度:{sys._getframe().f_depth}")
print(f"递归限制:{sys.getrecursionlimit()}")

def main(x):
    print(x, f"当前栈深度:{sys._getframe().f_depth}")
    x += 1
    return main(x)

main(0)

运行后你会看到,报错时的栈深度刚好接近1000的限制。

如果确实需要更深的递归,可以用sys.setrecursionlimit(自定义数值)手动调高限制,但不建议这么做:过深的递归会有栈溢出风险,Python本身也没有做尾递归优化,无限递归的场景最好改用循环迭代实现。

内容的提问来源于stack exchange,提问作者dancingvulture

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:08