如何解决使用Python有效地计算第n个斐波那契数
我目前正在使用Micheal.T.Goodrich的“使用Python的算法和数据结构”来学习递归。作者提出了一种使用递归来计算第n个斐波那契数的更好方法,而没有通常方法的空间复杂性。但是我只是无法绕开程序的直觉。有人可以解释一下吗?
- 使用普通递归函数查找第n个斐波那契数
def Fibonacci(n):
if n < = 1:
return (n)
else:
return Fibonacci(n - 1) + Fibonacci (n - 2)
- 优化的解决方案:
def Fibonnaci(n):
if n <= 1:
return (n,0)
else:
(a,b) = Fibonacci(n - 1)
return (a+b,a)
有人可以帮助我了解优化的解决方案吗?
解决方法
尝试像这样查看第二种解决方案。对于每行(基本情况除外),您都在看(a + b,a),其中a,b来自其下面的行。
n=7 --> (8+5=13,8)
n=6 --> (5+3=8,5)
n=5 --> (3+2=5,3)
n=4 --> (2+1=3,2)
n=3 --> (1+1=2,1)
n=2 --> (1+0=1,1)
n=1 --> (1,0) // n <= 1
纤维顺序:{1、1、2、3、5、8、13}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。