在
script.py
文件中:def f(n, memo={0:0, 1:1}):
if n not in memo:
memo[n] = sum(f(n - i) for i in [1, 2])
return memo[n]
print(f(400))
python3.6 script.py
正确打印出 f(400)
,但是使用 python3.7 script.py
会导致堆栈溢出。在 3.6 中递归限制在 f(501)
处被达到,在 3.7 中则在 f(334)
处被达到。
Python 3.6 和 3.7 之间发生了什么变化,导致此代码的最大递归深度提前超过了限制?
f(100)
可以预先填充共享缓存,避免超出堆栈限制,从而减少对后续调用f(400)
的递归深度。 - chepnerRecursionError
所需的最小值是多少?我不确定如何负责,但3.7是第一个具有新的键顺序保留实现的(C)Python版本。 - chepnersum
和自动限制搜索。在我的测试中,自制的sum似乎有所不同,将Python 3.6的限制降低到333 这里。所以看起来是关于sum
的某些变化。但我不知道如何进一步查找... - Kelly Bundy