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项的方法相关推荐

  1. C语言程序设计——递归函数 ,用递归方法编程计算Fibonacci数列的前N项。其中fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2)。

    用递归方法编程计算Fibonacci数列的前N项.其中fib(0)=0,fib(1)=1,fib(n)=fib(n-1)+fib(n-2). **输入格式要求:"%d" 提示信息: ...

  2. 编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中. 代码: #inc ...

  3. python编写递归函数、求斐波那契数列第n项_用Python实现求Fibonacci数列的第n项

    1. 背景--Fabonacci数列的介绍(摘自百度百科): 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacc ...

  4. C语言-计算Fibonacci数列,直到某项大于1000为止,并输出该项的值。

    #include<stdio.h> main() {int f1,f2,f;f1=0;f2=1;do{f=f1+f2;f1=f2;f2=f;}while(f2<=1000);prin ...

  5. 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)

    感谢山东工商学院学院厉玉蓉老师提供的完美数学推导,我在重写和整理时略加修改,比如变量替换时她喜欢用字母z,而我喜欢用x,哈哈.当然,还有另外几个小地方^_^ 本文从Fibonacci数列第n项的通项公 ...

  6. 7-2 计算Fibonacci数列的前N(N<=20)项 (10 分)

    7-2 计算Fibonacci数列的前N(N<=20)项 (10 分) 编译器:C++ (g++) 从键盘读入正整数N(N<=20),用动态分配空间的方法计算Fibonacci数列的前N项 ...

  7. C语言—递归函数 用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数。

    用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数. **输入格式要求:"%d" 提示信息:"Input n:& ...

  8. fibonacci数列python_从 Python 计算 Fibonacci 数列说起

    从 Python 计算 Fibonacci 数列说起 09 Oct, 2012 编程语言之争,争到最后大都就是在争论速度了,速度当然很重要,毕竟现实的物理设备和人类的想象力之间差距还是蛮大的,然而比较 ...

  9. C语言计算Fibonacci数列并将Fibonacci数列并写入文件中

    计算Fibonacci数列并将Fibonacci数列 写入文件中 #include<stdio.h> #define N 20 int main() {int f[N]={0,1};int ...

最新文章

  1. Mysql备份还原数据库之mysqldump实例及参数详细说明
  2. 6条可以成为更好程序员的建议
  3. opcache php 原理_php之Opcache
  4. matlab 多元多项式回归_Python机器学习之?线性回归入门(二)
  5. python中需要用到的英文词汇-使用python从语料库中提取最常用的单词
  6. 数据结构——队列链表实现
  7. 2016二级c语言笔试内容,2016年计算机二级c语言笔试试题「最新」
  8. ora29280 oracle,细节:utl_file_dir错误设置导致ORA-29280
  9. python fillna,Pandas之Fillna填充缺失数据的方法
  10. Android--使用剪切板在Activity中传值
  11. Kali Linux 秘籍 第五章 漏洞评估
  12. 最大似然估计与最小二乘
  13. 用大数据解决“痛点”问题 “云上贵州”再发力
  14. 百变郁锦香,开创新典范,深化全球战略布局成就国际高端酒店品质之选
  15. Graphite 简介
  16. 微信开发(三)创建菜单
  17. Lync Server 2010不同规模拓扑图详解
  18. GAMES101学习-法线贴图学习笔记
  19. 在moonseo学习后的真实感悟!
  20. CDH6.2.1CM6.2.1版本部署操作文档

热门文章

  1. 服务器第二代型号,SK Hynix公开第二代服务器用SSD
  2. mysql delete node_Node.js MySQL DELETE
  3. python map用法_讲解Python map()函数和将map()与多个Iterables一起使用
  4. dense sift matlab,一个 Dense SIFT 算法的 matlab 实现 | 学步园
  5. java rest httpclient_Httpclient与RestTemplate的比较(比httpClient更优雅的Restful URL访问)...
  6. linux系统下聊天工具,linux系统环境下如何使用amsn聊天工具_linux教程
  7. r语言 list添加_R语言里面双层list变成长形数据框
  8. 使用oracle sql profile固定执行计划
  9. quartz实现每周一至周五 非法定节假日 每天9:30-11:30,13:00-15:00执行定时任务
  10. EnvironmentShare