所以我试图制作一个简单的程序,计算谐波系列的总和,然后打印结果。但随后递归限制使其无法继续运行。
以下是该计划:
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
我希望程序继续运行尽管递归限制有办法吗?
答案 0 :(得分:5)
直接回答:不,您无法禁用堆叠限制;它可以避免耗尽所有可用的堆栈空间,这会在没有任何Traceback信息的情况下使运行崩溃。
另外,请注意,可能不具有无限的堆栈大小:每个堆栈帧占用RAM;你最终会跑掉并使系统崩溃。
解决方法:如果您可以处理硬崩溃,那么只需使用sys.setrecursionlimit
将其设置为超出系统的物理限制(与系统相关)。
真正的解决方案:正如Juan已经指出的那样,您可以简单地将递归重新编码为循环。