如何知道Python 3中可以为平台设置的最大递归深度?
How to know the maximum recursion depth one can set for a platform in Python 3?
我正在实施深度优先搜索算法,以获取具有大量节点(超过 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
的最大值是多少?
更新:关于堆栈溢出的其他类似问题询问如何更改值或最大递归深度是多少。我需要了解 "limit" 的最大可能值是多少。 sys.getrecursionlimit()
会给我当前设置的任何 "limit"。
您已经找到问题的答案,但对于如何绕过递归限制仍然没有答案。
简单的方法是维护自己的堆栈。对于深度优先,可以这样做。
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)
我正在实施深度优先搜索算法,以获取具有大量节点(超过 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
的最大值是多少?
更新:关于堆栈溢出的其他类似问题询问如何更改值或最大递归深度是多少。我需要了解 "limit" 的最大可能值是多少。 sys.getrecursionlimit()
会给我当前设置的任何 "limit"。
您已经找到问题的答案,但对于如何绕过递归限制仍然没有答案。
简单的方法是维护自己的堆栈。对于深度优先,可以这样做。
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)