我正在实现深度优先搜索算法,以获取具有大量节点(超过 800,000 个)的图的强连通分量。
运行时出现如下错误:
RecursionError: maximum recursion depth exceeded in comparison
为了解决这个问题,我使用了 sys.setrecursionlimit(numNodes)
的帮助功能。
执行此操作时,IDLE 开始执行代码,但随后自动重新启动而不提供任何输出。
基于快速网络搜索(example),我认为这是因为在递归这么多节点时 IDLE 超出了内存限制。
对于 numNodes = 20000,sys.setrecursionlimit(3000)
可以解决问题
对于 numNodes = 40000,sys.setrecursionlimit(5000)
可以解决问题
对于 numNodes = 80000,sys.setrecursionlimit(5000)
重新启动 IDLE。 (这里注意,它不显示 RecursionError,只是重启 IDLE)
疑问:我可以为我的平台设置的 sys.setrecursionlimit(limit)
的 limit
的最大值是多少?
更新:关于堆栈溢出的其他类似问题询问如何更改值或最大递归深度是多少。我需要了解“限制”的最大可能值是多少。 sys.getrecursionlimit()
会给我当前设置的任何“限制”。
最佳答案
您已经找到问题的答案,但对于如何绕过递归限制仍然没有答案。
简单的方法是维护自己的堆栈。对于深度优先,可以这样做。
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)
关于python - 如何知道可以为 Python 3 中的平台设置的最大递归深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57363426/