在Python中,有没有一种方法将递归限制设置为无限?

4

我尝试编写一个简单的程序,计算调和级数的总和,然后将结果打印出来。但是由于递归限制,程序无法继续执行。

以下是程序:

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

我希望程序能在递归限制的情况下继续运行,有什么办法可以实现吗?


2
这是在请求一个段错误。 - juanpa.arrivillaga
3
将你的尾递归改写为循环。 - Fred Larson
无限?不是的。其他编程语言可以针对无限递归进行优化(如果程序员正确地执行),但Python不能。 - mypetlion
@mypetlion Python不会对尾调用进行优化,但我认为原则上它没有任何理由不这样做。 - juanpa.arrivillaga
1个回答

8
直接回答: 不可以禁用栈限制,因为这样会使用完所有可用的栈空间,导致程序崩溃而没有任何Traceback信息。

同时,请注意无法实现无限的栈大小:每个栈帧都占用内存;你最终会耗尽所有内存并使系统崩溃。

解决方法:如果你能够处理硬件故障,那么可以使用sys.setrecursionlimit将其设置超出系统的物理限制(这取决于系统)。

真正的解决方法:如Juan所述,你可以将递归重写为循环。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接