如何知道在Python3中可以为平台设置的最大递归深度?

2024-06-02 00:54:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在实现深度优先搜索算法,以获得具有大量节点(超过800000个)的图的强连通组件。你知道吗

运行时,出现以下错误:

RecursionError: maximum recursion depth exceeded in comparison

为了解决这个问题,我使用了^{}函数的帮助。 执行此操作时,IDLE开始执行代码,但随后自动重新启动,而不提供任何输出。你知道吗

基于一个快速的web搜索(for example),我认为它的空闲是因为在递归通过这么多节点时超出了内存限制。你知道吗

对于numNodes=20000,sys.setrecursionlimit(3000)起作用

对于numNodes=40000,sys.setrecursionlimit(5000)起作用

对于numNodes=80000,sys.setrecursionlimit(5000)重新启动空闲。(注意,这里不显示RecursionError,只重新启动IDLE)

怀疑:我可以为我的平台设置的limit对于sys.setrecursionlimit(limit)的最大值是多少?你知道吗

更新:关于堆栈溢出的其他类似问题询问如何更改值或最大递归深度是多少。我需要了解“极限”的最大可能值是多少。sys.getrecursionlimit()将给出当前设置的任何“限制”。你知道吗


Tags: 节点错误sys组件空闲limit搜索算法idle
1条回答
网友
1楼 · 发布于 2024-06-02 00:54:24

您已经找到了问题的答案,但是对于如何绕过递归限制,您仍然没有答案。你知道吗

简单的方法是维护自己的堆栈。可以这样做的深度优先。你知道吗

todo = [starting, stuff]
while 0 < len(todo):
    task = todo.pop()
    do work
    todo.extend(future_tasks)

在这种形式中,从DFS切换到BFS需要从堆栈切换到队列。在Python中这很简单:

todo = [starting, stuff]
while 0 < len(todo):
    task = todo.pop(0)  # CHANGED HERE
    do work
    todo.extend(future_tasks)

相关问题 更多 >