为什么我的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
相关产品推荐
相关产品推荐

