百科问答小站 logo
百科问答小站 font logo



使用Python函数递归实现斐波那契数列时为什么运行速度很慢? 第1页

  

user avatar   li-xiang-1-48 网友的相关建议: 
      

本人在用python计算同分异构体数量的时候遇到了类似问题。原因是,递归逻辑导致总是重复计算前面已经算过的内容。

例如,计算Fib(5)的时候,需要先算出Fib(3)和Fib(4),但算出Fib(3)后,在计算Fib(4)=Fib(2)+Fib(3)的时候,又计算了一次Fib(3).

(图片来自使用缓存方式优化递归函数与lru_cache - sfencs - 博客园

这样下去,到计算Fib(100)的时候,就至少需要计算两次Fib(98),而计算Fib(98)又至少需要计算两次Fib(96),时间复杂度为指数级,所以程序短时间内无法完成。

有一个简单的解决方案:使用lru_cache缓存装饰器,缓存一些中间结果:

       from functools import lru_cache @lru_cache(maxsize=1024)  # 缓存斐波那契函数已经计算出的结果,最多占用1024字节内存 def fibn(n):     if n == 0:         return 1     elif n == 1:         return 1     else:         return fibn(n-1) + fibn(n-2)  print(fibn(100))        # 求第100项的值,可瞬间计算出来     




  

相关话题

  从1分钟图上起笔递归至月线级别走势,这个工作量有多大吗? 
  Python函数中*和**的内涵究竟是什么呢? 
  使用Python函数递归实现斐波那契数列时为什么运行速度很慢? 
  如何用python读取下面的csv文件? 
  python学习一定用pycharm吗? 
  Python中使用class()有什么优势 (PS:想知道实际应用中的优势)? 
  如何用python读取下面的csv文件? 
  使用Python函数递归实现斐波那契数列时为什么运行速度很慢? 
  有那位大神使用过tensorflow-textsum来做文本摘要么?求指教? 
  将斐波那契数列从左到右、从上往下地依次填入一个n*n的矩阵中,当n≥3时,行列式是否一定为0? 

前一个讨论
如何看待粥店挂“庆祝美日疫情”横幅 ?
下一个讨论
python如何将变量名转化为同名字符串?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利