绕过系统递归限制?

时间:2016-05-06 18:07:13

标签: python-3.x recursion

我试图绕过递归并提出一个问题。在我的机器上,while()给出了sys.getrecursionlimit(),这意味着我可以递归地调用函数最多1000次。但是,我能够成功运行以下代码:

1000

这几乎是瞬间完成的,并给了我def sum_badly(S, start, stop): if start == stop: return S[start] else: return sum_badly(S, start, (start+stop)//2) + sum_badly(S, (start+stop)//2 + 1, stop) MAX = 100000 S = range(MAX) print(sum_badly(S, 0, MAX-1)) 的预期答案。但是,我的程序如何能够绕过4999950000调用的递归限制?

1 个答案:

答案 0 :(得分:3)

实际上,代码的“递归深度”仅为log_2(100000)(约),即cca 17.

当然,你正在进行更多的递归调用,但是同时堆栈中的调用次数超过17次(好吧,因为舍入错误可能会多一点)

如何验证这一点的好方法: - 创建全局变量depth - 在sum_badly开始的任何时候将depth加1 - 在sum_badly结束时随时减少depth

现在,您可以检查depth的最大值以及原因。