实现斐波拉契的三种方法:
方法一:递归方法

def fib_1(index):if index <= 2:return 1else:return fib_1(index-1) + fib_1(index-2)if __name__ == "__main__":print(fib_1(10))

结果如下:

55

方法二:遍历

def fib_2(index):re_list = []n, a, b = 0, 0, 1while n < index:re_list.append(b)a, b = b, a+bn +=1return re_listif __name__ == "__main__":print(fib_2(10))

结果如下:

[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

方法三:生成器

def fib_3(index):n, a, b = 0, 0, 1while n < index:yield ba, b = b, a+bn += 1if __name__ == "__main__":for item in fib_3(10):print(item, end=" ")

结果如下:

1 1 2 3 5 8 13 21 34 55

性能分析:
性能从高到底:fib_3 , fib_2, fib_1

fib_1改进版

def decorate(func):cache = {}  # 缓存@functools.wraps(func)def wrap(*args):res = cache.get(args)if not res:res = cache[args] = func(*args)return resreturn wrap@decorate
def fib_1(index):if index <=2:return 1return fib_1(index - 1) + fib_1(index - 2)

#性能分析

 if __name__ == '__main__':t_1 = timeit.timeit(stmt="fib_1(100)", setup="from  __main__ import fib_1", number=100)t_2 = timeit.timeit(stmt="fib_2(100)", setup="from  __main__ import fib_2", number=100)t_3 = timeit.timeit(stmt="fib_3(100)", setup="from  __main__ import fib_3", number=100)print(t_1)  # 打印执行print(t_2)  # 打印执行print(t_3)  # 打印执行

结果:

0.00027622655034065247
0.001580890268087387
2.839416265487671e-05

性能分析:
性能从高到底:fib_3 , fib_1, fib_2

实现斐波拉契的三种方法相关推荐

  1. 斐波那契数列三种方法计算,光棍节快乐

    //斐波那契数列三种方法计算 //Fibnacci(0)=0 //Fibnacci(1)=1 //Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2)  [n>1] / ...

  2. C++实现斐波那契的三种方法

    题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)).斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + ...

  3. 斐波那契数列三种实现+矩阵乘法+矩阵cimi

    package com.lyk.kk;/** * Created by Administrator on 2017/9/4. */ public class A1 {//矩阵乘法 public int ...

  4. python3实现斐波那契数列--4种方法

    基础版(list方法) # 比较占内存 w = int(input("输入一个数字还你一个斐波那契数列:")) list_res = [] def list_n(n):if n&g ...

  5. Python 求解斐波那切(三种方法)

    普通递归版 def fib(n):return fib(n-1)+fib(n-2) if n >= 2 else n 迭代版 def fib(n):if n < 2:return na, ...

  6. 深入剖析斐波拉契数列

    深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...

  7. 斐波拉契数列 Java三种实现

    对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归.对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的. 在此,我贴出三种实现(递归,迭代,动态规划): 我们先看代码的执 ...

  8. 动态规划学习之三种方法解决斐波拉契数

    斐波拉契数是一个很经典的问题,也会很多公司面试的考题,每个学习计算机的同学都会接触这个问题,尤其是在学习递归的时候,利用递归来解决斐波拉契数是很多教材采用的一个例子,所以很多同学一想到斐波拉契马上就会 ...

  9. 斐波拉契数的几种求法

    斐波拉契数列求法的题目有: 509 斐波拉契 面试题10-1 斐波拉契数列 70 爬楼梯 解法一: 傻递归 public class Solution {public int fib(int N) { ...

最新文章

  1. Android actionBar与Fragment结合使用Demo2
  2. 浅谈如何提升数据中心制冷能效
  3. oracle定时任务的编写及查看删除
  4. Navcat:1251 client does not support ...问题
  5. 初次就这么给了你(Django-rest-framework)
  6. 实现简单 codeigniter 缓存 (cache)
  7. 扩展CheckBoxList实现选中绑定
  8. 自己动手写操作系统(一)
  9. directsound播放32位float类型的pcm格式音频
  10. csf播放器(csf播放器ios)
  11. 视频文件格式--视频封装格式--视频编码格式区分
  12. 无源贴片晶振四角引脚_贴片晶振引脚脚位地方向如何进行区分?
  13. java version什么意思_输入java -version命令后提示结果如下,是什么意思??哪位能看懂,在线等。。。。...
  14. JumpServer邮件设置
  15. signal 11 定位
  16. win2003 php配置,Win2003 PHP环境配置
  17. 星之匙,石之阶,火之行:我们能从EMUI 10.1读出什么
  18. python爬取微信聊天记录数据_[使用案例]python如何爬取微信好友信息?(上)
  19. 用JS解析LRC格式的歌词
  20. 过去挖煤,现在挖什么?李彦宏的家乡正在发生这些变化

热门文章

  1. charles 抓包小程序(电脑window,手机是iPhone ios 10.3)
  2. 数据结构-16枚硬币问题
  3. 铁路轨道交通智慧管理系统
  4. svn 错误信息:这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。
  5. 按以下规律将电文变成密码,将字母A变成E,a变成e,即变成其后的第四个字母
  6. SAS中的informat和input
  7. 北京大学计算机学院保研名单,北京大学2011年保研名单汇总
  8. 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程
  9. java栈溢出漏洞cve,TP-Link WR841N 栈溢出漏洞(CVE-2020-8423)分析
  10. HTML5+CSS期末大作业:环保网站设计——动物保护网(6页) 大学生环境保护网页作品 环保网页设计作业模板 学生网页制作源代码下载...