我有一个问题sys.setrecursionlimit()
来自蟒蛇docs https://docs.python.org/2/library/sys.html#sys.setrecursionlimit这个函数:
将Python解释器堆栈的最大深度设置为limit。此限制可防止无限递归导致 C 堆栈溢出并导致 Python 崩溃。
最高可能限制取决于平台。当用户有需要深度递归的程序和支持更高限制的平台时,她可能需要设置更高的限制。应该小心执行此操作,因为过高的限制可能会导致崩溃。
这是我的问题:
让我们看一下这个无用的递归函数:
def rec(N):
if N==0:
return 1
else:
return rec(N-1);
现在让我们将最大递归设置为 100:
sys.setrecursionlimit(100)
如果我尝试rec(99)
(100 次递归调用),我得到:
RuntimeError: maximum recursion depth exceeded
计算rec(99)
我需要将递归限制设置为 105。
为什么会这样呢?
这名字起得不好它应该说堆栈深度,而不是递归深度。递归意味着它是一遍又一遍地限制同一个线程。实际上,您可以拥有仅调用 100 深度的实际代码。我不会推荐它,但你可以。他们可以侥幸逃脱惩罚,因为在现实世界中,唯一遇到这种情况的时候就是递归。当你因此而崩溃时,看到“递归”这个词可以立即告诉你要寻找什么,而不是“堆栈”。
(堆栈应该给任何体面的程序员同样的线索,但说实话,你的代码刚刚崩溃了,你想要一个相关的错误消息,对吧? 99.99999% 的时间这会准确地告诉你你搞砸了什么(你错过了你的基本情况)递归。))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)