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

Python中sys.setrecursionlimit设置后递归次数不符问题咨询

问题分析与解答

为什么递归仅执行170次而非200次?

  • Jupyter Notebook的运行环境启动后,内核已完成一系列初始化操作,这些操作会占用一部分递归栈空间。你设置的sys.setrecursionlimit(200)是Python允许的总递归栈深度上限,减去Jupyter本身占用的栈帧数量后,留给递归函数fun1的可用栈深度只剩170左右,因此递归只能执行170次就触达上限。

递归调用报错的原因

  • 每次递归调用fun1()时,都会在调用栈中创建新的栈帧,用于存储函数的局部变量、返回地址等信息。当调用栈深度超过当前可用栈空间(总上限200减去Jupyter已占用部分),Python会触发RecursionError报错,这是内置的保护机制,防止无限递归耗尽系统内存。

为什么其他编辑器中没有这个问题?

  • 普通Python脚本的运行环境(如命令行、PyCharm等)启动时的初始化操作更少,占用的递归栈空间远小于Jupyter。设置sys.setrecursionlimit(200)后,可用的递归栈深度接近200,因此递归能执行到接近200次才会报错。

补充验证小技巧

  • 你可以在Jupyter中打印当前的栈深度,确认Jupyter本身占用的栈帧数量:
    import sys
    print(len([f for f in sys._current_frames().values()][0].f_traceback.tb_frame.f_back))
    
    用200减去这个数值,结果大致就是你能递归的次数。

你提供的测试代码:

import sys
i=0
def fun1():
    global i
    print("hello i = ",i)
    i+=1
    fun1()
print("Welcome")
sys.setrecursionlimit(200)
fun1()
print(sys.getrecursionlimit())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:06:29