实现斐波拉契的三种方法
实现斐波拉契的三种方法:
方法一:递归方法
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
实现斐波拉契的三种方法相关推荐
- 斐波那契数列三种方法计算,光棍节快乐
//斐波那契数列三种方法计算 //Fibnacci(0)=0 //Fibnacci(1)=1 //Fibnacci(n)=Fibnacci(n-1)+Fibnacci(n-2) [n>1] / ...
- C++实现斐波那契的三种方法
题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N)).斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + ...
- 斐波那契数列三种实现+矩阵乘法+矩阵cimi
package com.lyk.kk;/** * Created by Administrator on 2017/9/4. */ public class A1 {//矩阵乘法 public int ...
- python3实现斐波那契数列--4种方法
基础版(list方法) # 比较占内存 w = int(input("输入一个数字还你一个斐波那契数列:")) list_res = [] def list_n(n):if n&g ...
- Python 求解斐波那切(三种方法)
普通递归版 def fib(n):return fib(n-1)+fib(n-2) if n >= 2 else n 迭代版 def fib(n):if n < 2:return na, ...
- 深入剖析斐波拉契数列
深入剖析斐波拉契数列 前言 动态规划作为一种非常经典的一类算法,不仅在解决实际问题当中有很多实际的应用,同时通常也是面试的一个重点.本篇文章一步步剖析动态规划的基本原理,通过斐波拉契数列问题(优化时间 ...
- 斐波拉契数列 Java三种实现
对于很多Java初学者来说,求解斐波拉契数列,基本上所使用的方式都是递归.对于求解斐波拉契数列来说,递归的实现方式的效率是极其低下的. 在此,我贴出三种实现(递归,迭代,动态规划): 我们先看代码的执 ...
- 动态规划学习之三种方法解决斐波拉契数
斐波拉契数是一个很经典的问题,也会很多公司面试的考题,每个学习计算机的同学都会接触这个问题,尤其是在学习递归的时候,利用递归来解决斐波拉契数是很多教材采用的一个例子,所以很多同学一想到斐波拉契马上就会 ...
- 斐波拉契数的几种求法
斐波拉契数列求法的题目有: 509 斐波拉契 面试题10-1 斐波拉契数列 70 爬楼梯 解法一: 傻递归 public class Solution {public int fib(int N) { ...
最新文章
- Android actionBar与Fragment结合使用Demo2
- 浅谈如何提升数据中心制冷能效
- oracle定时任务的编写及查看删除
- Navcat:1251 client does not support ...问题
- 初次就这么给了你(Django-rest-framework)
- 实现简单 codeigniter 缓存 (cache)
- 扩展CheckBoxList实现选中绑定
- 自己动手写操作系统(一)
- directsound播放32位float类型的pcm格式音频
- csf播放器(csf播放器ios)
- 视频文件格式--视频封装格式--视频编码格式区分
- 无源贴片晶振四角引脚_贴片晶振引脚脚位地方向如何进行区分?
- java version什么意思_输入java -version命令后提示结果如下,是什么意思??哪位能看懂,在线等。。。。...
- JumpServer邮件设置
- signal 11 定位
- win2003 php配置,Win2003 PHP环境配置
- 星之匙,石之阶,火之行:我们能从EMUI 10.1读出什么
- python爬取微信聊天记录数据_[使用案例]python如何爬取微信好友信息?(上)
- 用JS解析LRC格式的歌词
- 过去挖煤,现在挖什么?李彦宏的家乡正在发生这些变化
热门文章
- charles 抓包小程序(电脑window,手机是iPhone ios 10.3)
- 数据结构-16枚硬币问题
- 铁路轨道交通智慧管理系统
- svn 错误信息:这是在主机名解析时通常出现的暂时错误,它意味着本地服务器没有从权威服务器上收到响应。
- 按以下规律将电文变成密码,将字母A变成E,a变成e,即变成其后的第四个字母
- SAS中的informat和input
- 北京大学计算机学院保研名单,北京大学2011年保研名单汇总
- 星环TranswarpInceptor通过waterdrop添加表,视图,函数和存储过程
- java栈溢出漏洞cve,TP-Link WR841N 栈溢出漏洞(CVE-2020-8423)分析
- HTML5+CSS期末大作业:环保网站设计——动物保护网(6页) 大学生环境保护网页作品 环保网页设计作业模板 学生网页制作源代码下载...