Python快速计算Fibonacci数列中第n项的方法
来源:互联网 发布:南京麒麟网络问坛 编辑:程序博客网 时间:2024/06/03 17:03
from time import time
from functools import lru_cache
def fibo1(n):
'''递归法'''
if n in (1, 2):
return 1
return fibo1(n-1) + fibo1(n-2)
@lru_cache(maxsize=64)
def fibo2(n):
'''递归法,使用缓存修饰器加速'''
if n in (1, 2):
return 1
return fibo2(n-1) + fibo2(n-2)
def fibo3(n):
'''序列解包'''
a, b = 1, 1
for i in range(2, n+1):
a, b = b, a+b
return a
# 测试3个函数的执行速度
n = 40
for fibo in (fibo1, fibo2, fibo3):
start = time()
print(fibo.__name__,
fibo(n),
sep=':',
end=':')
print(time()-start)
运行结果:
fibo1:267914296:67.31945824623108
fibo2:267914296:0.0
fibo3:267914296:0.0
由于第一个函数运行速度非常慢,在n变大时只测试后面2个函数的执行时间,当n=120时,运行结果为:
fibo2:5358359254990966640871840:0.0
fibo3:5358359254990966640871840:0.0
当n=220时,运行结果为:
fibo2:4244200115309993198876969489421897548446236915:0.0
fibo3:4244200115309993198876969489421897548446236915:0.0
当n=380时,第二个函数由于递归深度过大而崩溃,抛出异常:
RecursionError: maximum recursion depth exceeded while calling a Python object
下面继续测试第3个函数,当n=500时,运行结果为:
fibo3:139423224561697880139724382870407283950070256587697307264108962948325571622863290691557658876222521294125:0.015594482421875
当n=1000时,运行结果为:fibo3:43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875:0.035840511322021484
当n=8000时,运行结果为:
fibo3:3561533204460626739768914905427460387141369539110154082973500638991885819498711815304829246223963373749873423083216889782034228521693267175594214186111978816819236959743284321273097535654614718808050244321699002512466203835566030351092652496815708455980825654877181538741827129421689128991879649533246136168998590044965735035810856774605383628378979290580539135791985063484992877932473487054068899476937399295193905527420792975902913836012199062687063537510151753758100626402591751183925883151617648375005313453493271681248233059858496951790113255897429539560654496639601132039360167542277472498901884679404509894269174519328918160745655327632006736189766801968534195725815421784083495026969542066047758885029695257263330719223956309043195653930347983496830801755572982419821881275569179922973415736010289561700699477021488635509784509168019589640190234350021673802856836365767446249424907273016689053388000785637444921523414602360860001530139933615215383220927084750528293779491002813557093860863839463287251443115581618266959802005566973874793475256663122039030056061200186123236430592279484254766158650545069933528061680141046574115103014532101595841822474764213889385114174543352137856680694687244097968099924183815689652779302937329729253678579649215884078334428338037327451220722810587680172255878795449524781554973097109174140632623167659027450550461045055883872225659796812847075286475208205923875668405160707778568995306926178023176315799965539425437791083258303238592641010878264249883586034912756021070468742995902773902487497010335873840408520900059054071283266816325489230566003110549946685475230821114509971542662742044237174282248020953398789607528748909125:0.09996175765991211
----------相关阅读---------
Python版组合数计算方法优化思路和源码
Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)
Python编写人机对战小游戏(抓小狐狸)
Python寻找给定序列中相差最小的两个数字
几行Python代码模拟轮盘抽奖游戏
Python使用递归法对整数进行因数分解
Python模拟大整数乘法的小学竖式计算过程
基于非递归算法的汉诺塔游戏之Python实现
Python计算有向图节点的入度和出度
Python使用广度优先和深度优先两种方法遍历目录树
Python使用筛选法计算小于给定数字的所有素数
哈夫曼编码原理与Python实现代码(附手动推导过程原稿真迹)
Python版堆排序算法
Python版归并排序算法(附Python程序__name__属性用法演示视频)
Python版快速排序算法(附pip安装扩展库演示视频)
Python模拟汉诺塔问题移动盘子的过程
Python版双链表结构与有关操作
侏儒排序算法原理与Python实现
Python实现单链表
Python版基于递归的冒泡排序算法
Python版快速排序算法
Python版选择排序算法
Python版冒泡法排序算法
Python计算整数阶乘的几种方法比较
鸡兔同笼问题新解与Python实现
Pythonic:递归、回溯等5种方法生成不重复数字整数
一维序列卷积之Python实现
----------喜大普奔----------
1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》已于2017年8月1日在清华大学出版社出版,并于2017年9月进行了第2次印刷。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:
https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3
- Python快速计算Fibonacci数列中第n项的方法
- 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)
- 定义Fibonacci数列,输入n,用最快的方法求该数列的第n项
- 求Fibonacci数列的第n项
- 求Fibonacci数列的第n项
- 输入n,用最快的方法求Fibonacci 数列的第n 项
- 【微软100题】输入n,用最快的方法求Fibonacci数列的第n项
- Fibonacci数列第n项的第7种计算方法:Python列表
- poj 3070 Fibonacci (矩阵快速幂求斐波那契数列的第n项)
- Fibonacci数列第n项的log(n)算法
- 19.定义Fibonacci数列,输入n,用最快的方法求该数列的第n项
- 17. 微软面试题:用最快的方法计算出 Fibonacci数列中的第n项
- 求斐波那契 (Fibonacci) 数列第 n 项的算法
- 求斐波那契 (Fibonacci) 数列第 n 项的算法
- Fibonacci数列第N项的两种计算方法比较
- 递归实现求Fibonacci数列的第n项
- 函数递归法求fibonacci数列中第n项的值
- <仅是自己做笔记。。。系列-11>输入n,用最快的方法求Fibonacci数列的第n项。
- 主成分分析PCA
- 打包策略
- python可迭代对象和迭代器
- Docker 架构
- U3D中使用socket
- Python快速计算Fibonacci数列中第n项的方法
- Fragment
- 文章标题
- unity开发中使用 通讯协议
- 计算机系统-->计算机系统漫游
- 区间DP 最大面积最小的三角形划分
- eclipse中点击web选项时出现"the currently displayed page contains invalid values "
- 李开复:人工智能时代,你的人生意义在哪……
- 太阳系其实是被造出来的!来,用视觉聆听宇宙之音!