3.斐波那契数列的高效方法

斐波那契数列的递归方法众所周知,但是递归也不是一个高效的解决方法。
从下边的调用图可以看出来:



其中,对于1和2的计算重复了多次。
因此如果对数列中已经计算过的数字进行存储这样就可以只计算一次每个数值,达到高效的目的,计算时间也相对减少了。

1 known = {0:0,1:1}
2 
3 def fibonacci(n):
4     if n in known:
5         return known[n]
6 
7     res = fibonacci(n-1)+fibonacci(n-2)
8     known[n] = res
9     return res

代码如上,把计算过的数值添加到一个字典里,就可以避免重复计算。
注:字典的值可以使用列表,但是键不可以。但是为了解决这个问题,键是可以使用元组的,以后遇到再解释。
另外,开始我也有点疑虑,为什么known不是一个全局变量但是却能在函数里边修改和调用,后来知道了在python中可以修改的变量是不必再次声明全局的。而如果是个元组或者是个单独的str或者int变量想在函数这个局部里边使用就需要声明全局,否则就是重新构造了一个变量,而不是对原先的进行修改。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,628评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 178,812评论 25 709
  • 这段时间北京的天气就像个更年期的大妈,又冷又霾,分分钟冻成狗。加上连续几天的无底线加班,身心俱疲。没有力气说话,也...
    深海鱼不吃鱼阅读 276评论 1 2
  • 此篇日志的时间是:2013年5月12日,今年是我来京的第三年,回忆过去,别是一番滋味。 首先,今天是个特殊的日子母...
    武陆柒阅读 846评论 0 1
  • 你认为自己是个美丽的人儿? 不如照照镜子吧 看看你被粉底遮住的苍白的脸 凌乱的头发 浮夸的服装 你认为自己是个聪明...
    柏舟茶多酚阅读 133评论 3 1

友情链接更多精彩内容