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

为何提高递归限制后,回溯信息中的重复次数未增长?

为什么修改递归深度限制后,回溯重复次数仅小幅增加?

核心原因拆解

  1. 递归限制的实际生效逻辑
    Python的sys.setrecursionlimit(n)控制的是解释器允许的总栈帧数量,而非递归函数可调用的次数。解释器启动时会占用若干栈帧(比如主程序入口、REPL环境的帧),默认recursionlimit为1000时,递归函数实际能执行约997次调用,对应回溯里的[Previous line repeated 996 more times]——因为已经显示了第一个递归函数调用的帧,剩下的996次调用用重复条目概括。

  2. 回溯的智能截断机制
    当递归深度过大时,Python会自动截断回溯输出:仅显示开头的少量重复帧,剩余部分全部合并为一行重复提示。这个截断阈值是Python内部设定的,和你设置的递归限制无关——哪怕实际递归深度达到1900次,回溯里的重复次数也只会比默认值多一点点,不会同步翻倍。

  3. 系统栈空间的隐性限制
    即便你把recursionlimit设为2000,操作系统给Python进程分配的栈空间是有限的(通常为几MB)。每个递归调用的栈帧都要占用内存,2000个栈帧可能已经接近系统栈的上限,导致实际能执行的递归次数仅比默认值多1次,自然回溯重复数只增加1。

验证实际递归深度

要确认是否是回溯截断导致的问题,可以给递归函数添加计数器:

import sys
sys.setrecursionlimit(2000)

call_count = 0
def recursive_func():
    global call_count
    call_count += 1
    recursive_func()

try:
    recursive_func()
except RecursionError:
    print(f"实际递归次数: {call_count}")

运行后会发现,call_count的值远大于997(比如1900左右,具体取决于系统配置),但回溯里的重复次数仍只有997左右——这就证明是回溯显示机制的问题,而非实际递归深度未提升。

内容的提问来源于stack exchange,提问作者Amir reza Riahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:20:05