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

时间:2018-03-01 21:40:53

标签: 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

我希望程序继续运行尽管递归限制有办法吗?

1 个答案:

答案 0 :(得分:5)

直接回答:不,您无法禁用堆叠限制;它可以避免耗尽所有可用的堆栈空间,这会在没有任何Traceback信息的情况下使运行崩溃。

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

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

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