有没有办法在 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 中将递归限制设置为无限? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python之路_递归

有没有办法通过 FCM 发送免费的无限制推送通知?

Freemarker - 将变量名设置和获取为空字符串

有没有办法在python中将列表中的所有值单独声明为列表[关闭]

Python之初识递归

有没有办法在 Azure DevOps 中将 PR 从特定分支限制到另一个分支