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

添加visited字典后仍触发maxRecursionDepth递归深度超限报错问题

问题原因
  • 核心错误:每次进入BackAndForth递归函数时,都会遍历全图节点将visited字典所有值重置为False,直接清空了上层递归标记的已访问节点状态。例如初始调用从节点0出发,标记0为已访问,递归进入邻接点2时,函数第一行就把所有访问标记重置,此时节点0的访问状态变回未访问,遍历2的邻接点时会再次触发以0为起点的递归,形成0→2→0→2的无限递归循环,最终触发递归深度超限报错。
  • 附加逻辑问题:使用全局变量count和visited,且没有回溯逻辑,即使修复无限递归问题,最终统计的路径数也会出错,不同递归分支的状态会互相干扰。
解决方案

修改核心逻辑如下:

  1. 将visited字典的初始化逻辑移到递归函数外,仅在最外层调用前执行一次,不要在递归过程中重置全量访问标记。
  2. 递归探索完当前节点的所有邻接分支后,将当前节点的访问标记恢复为False(回溯操作),保证其他路径可以正常访问该节点。
  3. 移除全局变量count,改为通过递归返回值累加路径数,避免全局变量状态污染。

修正后的可运行代码如下:

def BackAndForth(AList, current, end2, visited):
    # 到达终点时返回1条有效路径
    if current == end2:
        return 1
    count = 0
    # 标记当前节点已访问
    visited[current] = True
    # 遍历所有邻接点探索路径
    for neighbor in AList[current]:
        if not visited[neighbor]:
            count += BackAndForth(AList, neighbor, end2, visited)
    # 回溯:恢复当前节点未访问状态,供其他路径使用
    visited[current] = False
    return count

Alist = {
    0 :[2,3,6],
    1 :[3,5,6] ,
    2 :[0,3,4],
    3 :[0,1,2,4],
    4 :[2,3,5],
    5 :[1,4,6],
    6 :[0,1,5],
}
end1 = 0
end2 = 1
# 仅初始化一次访问标记字典
visited = {node: False for node in Alist.keys()}
print(BackAndForth(Alist, end1, end2, visited))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:15:03