Fibonacci数Python的四种解法
1:
# 计算Fibonacci数:
# Naive版本,时间效率O(1.618^n)
# 记忆化版本(增加line8、10、13),时间效率O(n)
# 注意:当n超过1000,可能超过系统允许的最大递归深度 from time import process_time # memo = {}
def fib(n):
# if n in memo: return memo[n]
if n < 2: f = n
else: f = fib(n-2) + fib(n-1)
# memo[n] = f
return f n = int(input('n = '))
start = process_time()
print(fib(n))
elapsed = (process_time() - start)
print("用时(秒):",elapsed)
2:
# 计算Fibonacci数:
# 迭代版本,时间效率O(n),空间效率O(n)
# 注意:当n超过1000000,可能出现Memory Error from time import process_time memo = {}
def fib(n):
for i in range(n+1):
if i < 2: f = i
else: f = memo[i-1]+memo[i-2]
memo[i] = f
return memo[n] n = int(input('n = '))
start = process_time()
print(fib(n))
elapsed = (process_time() - start)
print("用时(秒):",elapsed)
3:
# 计算Fibonacci数:
# 空间效率优化为O(2),时间效率O(n) from time import process_time def fib(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a n = int(input('n = '))
start = process_time()
print(fib(n))
elapsed = (process_time() - start)
print("用时(秒):",elapsed)
4:
# 计算Fibonacci数:
# 利用矩阵幂次求解,由于使用分治方法,时间效率O(log(n)) from time import process_time def fib(n): F = [[1, 1],
[1, 0]]
if (n == 0):
return 0
power(F, n - 1) return F[0][0] def multiply(F, M): x = (F[0][0] * M[0][0] +
F[0][1] * M[1][0])
y = (F[0][0] * M[0][1] +
F[0][1] * M[1][1])
z = (F[1][0] * M[0][0] +
F[1][1] * M[1][0])
w = (F[1][0] * M[0][1] +
F[1][1] * M[1][1]) F[0][0] = x
F[0][1] = y
F[1][0] = z
F[1][1] = w def power(F, n): if( n == 0 or n == 1):
return;
M = [[1, 1],
[1, 0]]; power(F, n // 2)
multiply(F, F) if (n % 2 != 0):
multiply(F, M) n = int(input('n = '))
start = process_time()
print(fib(n))
elapsed = (process_time() - start)
print("用时(秒):",elapsed)
Fibonacci数Python的四种解法的更多相关文章
- LeetCode算法题-Third Maximum Number(Java实现-四种解法)
这是悦乐书的第222次更新,第235篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第89题(顺位题号是414).给定非空的整数数组,返回此数组中的第三个最大数字.如果不存 ...
- LeetCode算法题-Valid Perfect Square(Java实现-四种解法)
这是悦乐书的第209次更新,第221篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第77题(顺位题号是367).给定正整数num,写一个函数,如果num是一个完美的正方形 ...
- LeetCode算法题-Missing Number(Java实现-四种解法)
这是悦乐书的第200次更新,第209篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第65题(顺位题号是268).给定一个包含n个不同数字的数组,取自0,1,2,...,n ...
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Intersection of Two Arrays(Java实现-四种解法)
这是悦乐书的第207次更新,第219篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第75题(顺位题号是349).给定两个数组,编写一个函数来计算它们的交集.例如: 输入: ...
- LeetCode算法题-Reverse Vowels of a String(Java实现-四种解法)
这是悦乐书的第206次更新,第218篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第74题(顺位题号是345).编写一个函数,它将一个字符串作为输入,并仅反转一个字符串的 ...
- LeetCode算法题-Ugly Number(Java实现-四种解法)
这是悦乐书的第199次更新,第208篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第64题(顺位题号是263).编写一个程序来检查给定的数字是否是一个丑陋的数字.丑陋的数 ...
- jmeter--参数化的四种方法
本文转自:http://www.cnblogs.com/imyalost/p/6229355.html 参数化是自动化测试脚本的一种常用技巧.简单来说,参数化的一般用法就是将脚本中的某些输入使用参数来 ...
- PyCharm 中文教程 01:运行 Python 的四种方式
<PyCharm 中文指南>在线阅读: http://pycharm.iswbm.com/ Github 项目主页: https://github.com/iswbm/pych... 1. ...
随机推荐
- C语言|博客作业11
问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/10127 我在 ...
- 你真的了解JMM吗?
引言 在现代计算机中,cpu的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...
- 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。
1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...
- Python列表中的字典按照该字典下的键值进行排序
列表中的字典按照该字典下的键值进行排序 这算是排序中比较复杂的一种情况吧,多重嵌套,按照某种规则进行排序.如下面这个json(注:这里这是该列表中的一个项): [ { "stat" ...
- 在Eclipse中混合Java和Scala编程
1. 新建项目目录 scala-java-mix 2. 创建 src 目录及子目录: mkdir -p src/main/java mkdir -p src/main/scala 3. 在目录 sca ...
- mac install: /usr/bin/unrar: Operation not permitted
按照教程mac下解压缩rar文件工具-rarosx(免费),在mac上安装rar,在执行命令 sudo install -c -o $USER unrar /bin 出现错误:install: /bi ...
- CSS 3D图片翻转 ——3D Flipping Effect
效果: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...
- 深入理解 Java 反射和动态代理
- Hadoop HDFS 源码解析记录
版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( https://www.cnblogs.com/mikevictor07/p/12047502.html ),以下内容为个人理解,仅 ...
- 【CSS】323- 深度解析 CSS 中的“浮动”
对于浮动这篇文章解析的狠透彻 ~ 写在最前 习惯性去谷歌翻译看了看 float 的解释: 其中有一句这样写的: she relaxed, floating gently in the water 瞬间 ...