有没有办法在 Python 中将递归限制设置为无限? [复制]
Posted
技术标签:
【中文标题】有没有办法在 Python 中将递归限制设置为无限? [复制]【英文标题】:Is there a way to set the recursion limit to infinite in Python? [duplicate] 【发布时间】:2018-08-10 01:53:06 【问题描述】:所以我试图制作一个简单的程序来计算谐波级数的总和,然后打印结果。但是递归限制会阻止它继续进行。
这是程序:
def harm_sum(n):
if n < 2:
return 1
else:
return (1 / n) + (harm_sum(n - 1))
x = 1
while True:
print(x, harm_sum(x))
x += 1
尽管有递归限制,我希望程序继续运行有没有办法做到这一点?
【问题讨论】:
这是在请求段错误。 尝试将尾递归重写为循环。 无限?不可以。其他语言可以优化无限递归(如果程序员正确地做到了),但 Python 不能。 @mypetlion python 不优化尾调用,但我认为原则上没有任何理由不能这样做。 【参考方案1】:直接回答:不,你不能禁用堆栈限制;它的存在是为了避免用完所有可用的堆栈空间,这会在没有任何 Traceback 信息的情况下使您的运行崩溃。
另外,请注意不可能拥有无限的堆栈大小:每个堆栈帧占用 RAM;你最终会用完并导致系统崩溃。
解决方法:如果您可以处理硬崩溃,则只需使用sys.setrecursionlimit
将其设置为超出系统的物理限制(取决于系统)。
真正的解决方案:正如 Juan 已经指出的,您可以简单地将递归重新编码为循环。
【讨论】:
以上是关于有没有办法在 Python 中将递归限制设置为无限? [复制]的主要内容,如果未能解决你的问题,请参考以下文章