Python中fibonacci程序的递归深度限制
我有一个Python程序,它对多达999的斐波那契序列执行得非常快。对于999以上的数字,程序会失败,并出现Python中fibonacci程序的递归深度限制,python,algorithm,Python,Algorithm,我有一个Python程序,它对多达999的斐波那契序列执行得非常快。对于999以上的数字,程序会失败,并出现递归错误:比较中超过了最大递归深度。我正在利用记忆来缓存先前值的斐波那契 这是我的密码 def fibonacci(position, cache=None): if cache is None: cache = [None] * (position + 1)
递归错误:比较中超过了最大递归深度
。我正在利用记忆来缓存先前值的斐波那契
这是我的密码
def fibonacci(position, cache=None):
if cache is None:
cache = [None] * (position + 1)
if cache[position] is not None:
return cache[position]
else:
if position < 3:
return 1
else:
cache[position] = fibonacci(position - 1, cache) + fibonacci(position - 2, cache)
return cache[position]
def fibonacci(位置,缓存=无):
如果缓存为无:
缓存=[None]*(位置+1)
如果缓存[位置]不是无:
返回缓存[位置]
其他:
如果位置<3:
返回1
其他:
缓存[位置]=斐波那契(位置-1,缓存)+斐波那契(位置-2,缓存)
返回缓存[位置]
有人知道我如何改进我的解决方案吗?有一个更简单的解决方案,可以避免递归:
def fibonacci(position):
if position < 3:
return 1
i = 3
last1 = 1
last2 = 1
while i <= position:
result = last1 + last2
last2 = last1
last1 = result
i+=1
return result
def fibonacci(位置):
如果位置<3:
返回1
i=3
last1=1
last2=1
我认为有一个封闭形式的解决方案,因此不需要递归。您可以进行迭代。你决定递归吗?Python有一个最大递归深度限制。因此,要么不使用递归,要么增加最大递归。但是第二个选项是非常不推荐的。您可以更改堆栈大小()或不使用递归解决方案。@这里的问题不是如何编写序列,而是如何处理递归深度问题。您可以用矩阵形式表示斐波那契函数,然后使用有效的矩阵乘法,将幂减半并平方。这使得递归堆栈为O(logn),而不是O(n),翻译成Python很容易,当这个问题结束时,我刚刚完成了这项工作。