在Python中有没有办法将递归限制设置为无穷大?

在Python中有没有办法将递归限制设置为无穷大?,python,python-3.x,Python,Python 3.x,所以我试图制作一个简单的程序,计算谐波级数的和,然后打印结果。但是递归限制阻止了它的继续 节目如下: 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 def harm_sum(n): 如果n

所以我试图制作一个简单的程序,计算谐波级数的和,然后打印结果。但是递归限制阻止了它的继续

节目如下:

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
def harm_sum(n):
如果n<2:
返回1
其他:
返回值(1/n)+(伤害总和(n-1))
x=1
尽管如此:
打印(x,伤害和(x))
x+=1

我希望程序在递归限制下继续运行,有什么方法可以做到这一点吗

直接应答:不,不能禁用堆栈限制;它的存在是为了避免耗尽所有可用的堆栈空间,这会在没有任何回溯信息的情况下使您的跑步崩溃

另外,请注意,不可能有无限大的堆栈大小:每个堆栈帧占用RAM;你最终会耗尽并使系统崩溃

解决方法:如果您可以处理硬崩溃,只需使用
sys.setrecursionlimit
将其设置为超出系统的物理限制(取决于系统)


真正的解决方案:正如Juan已经指出的,您可以简单地将递归重新编码为循环。

这是要求segfault。尝试将尾部递归重写为循环。无限?不。其他语言可以优化无限递归(如果程序员做得正确的话),但Python不行。@mypetlion-Python没有优化尾部调用,但我认为原则上没有任何理由不能。