三种Fibonacci数列第n项计算方法及其优劣分析
感谢国防科技大学刘万伟老师和中国传媒大学胡凤国两位老师提供的思路,文章作者不能超过8个字符,我的名字就写个姓吧,名字不写了^_^。另外,除了本文讨论的三种方法,之前的文章中还讨论了另外几种方法,详见相关阅读第一篇。
def fibo4(n):
'''递推法
适用于任意大小的n
使用生成器函数
速度快,无误差'''
def nested():
a, b = 1, 1
while True:
yield a
a, b = b, a+b
# 创建生成器对象
temp = nested()
# 获取前n-1项
for i in range(n-1):
next(temp)
# 返回第n项
return next(temp)
def fibo5(n):
'''通项公式法,速度也不错
涉及实数运算,会有误差,
n越大,误差越大,
n大到一定程度会崩溃'''
z = 5**0.5
u = (1+z) / 2
v = (1-z) / 2
return int((u**n - v**n)/(u-v))
from sympy import sqrt, Symbol, simplify
def fibo6(n):
'''通项公式法,速度快
通过符号计算库的简化策略,
弥补了实数运算引入的误差'''
c1 = ((1+sqrt(5))/2)
c2 = ((1-sqrt(5))/2)
c3 = sqrt(5)
k = Symbol("k")
f = (c1**k-c2**k)/c3
return simplify(f.subs(k, n))
n = 50
print(fibo4(n))
print(fibo5(n))
print(fibo6(n))
当n=50时,运行结果为:
12586269025
12586269025
12586269025
当n=80时,运行结果如下,注意开始fibo5有误差了:
23416728348467685
23416728348467744
23416728348467685
当n=200时,运行结果如下,误差越来越大了:
280571172992510140037611932413038677189525
280571172992512015699912586503521287798784
280571172992510140037611932413038677189525
当n=8000时,fibo4和fibo6仍然正常工作,而fibo5在n=1500左右时就已经无法工作了,代码崩溃。
Traceback (most recent call last):
File "C:/Python36/fibonacci.py", line 43, in <module>
print(fibo5(n))
File "C:/Python36/fibonacci.py", line 27, in fibo5
return int((u**n - v**n)/(u-v))
OverflowError: (34, 'Result too large')
----------相关阅读---------
Python快速计算Fibonacci数列中第n项的方法
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
2、董付国老师6本Python系列图书阅读指南
三种Fibonacci数列第n项计算方法及其优劣分析相关推荐
- Fibonacci数列第n项的第7种计算方法:Python列表
前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享 ...
- 计算Fibonacci数列第n项的第8种方法(数学推导与Python实现)
感谢山东工商学院学院厉玉蓉老师提供的完美数学推导,我在重写和整理时略加修改,比如变量替换时她喜欢用字母z,而我喜欢用x,哈哈.当然,还有另外几个小地方^_^ 本文从Fibonacci数列第n项的通项公 ...
- matlab求斐波那契数列第n项的值,求fibonacci数列第n项的值. 1 1 2 3 5 8....n ?
[C语言]用递归算法编写一个程序求Fibonacci数列的第n项值 #includeunsignedintFibonacci(intn);intmain(void){inti;for(i=1;i vb ...
- C语言 编写程序:请将Fibonacci数列前30项中的偶数值找出来,存储到一维数组中。其中,Fibonacci数列如下:1,1,2,3,5,8,13,21,34...该数列除前两项之外,其他任意
编写程序:请将Fibonacci数列前30项中的偶数值找出来,存储到一维数组中.其中,Fibonacci数列如下:1,1,2,3,5,8,13,21,34-该数列除前两项之外,其他任意一项都是相邻的前 ...
- 调用函数,输出Fibonacci数列的m项至n项
Description 定义递归函数fib(n),它的功能是返回第n项Fibonacci数,如fib(7)的返回值是13. 在主函数中,输入两个正整数m和n,调用该函数输出Fibonacci数列的m项 ...
- 6-3 计算Fibonacci数列每一项时所需的递归调用次数 (10 分)
计算并打印Fibonacci数列每一项时所需的递归调用次数,数列第一项从1开始. 要求: 1)定义表示调用次数的全局变量count: 2)定义用递归方法求Fibonacci数列的Fib()函数. 函数 ...
- 蓝桥杯Fibonacci数列第n项模10007取余问题
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- 6-3 计算Fibonacci数列每一项时所需的递归调用次数
6-3 计算Fibonacci数列每一项时所需的递归调用次数 (10 point(s)) 计算并打印Fibonacci数列每一项时所需的递归调用次数,数列第一项从1开始. 要求: 1)定义表示调用次数 ...
- C语言—递归函数 用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数。
用递归方法编程计算输出Fibonacci数列,同时打印出计算Fibonacci数列每一项时所需的递归调用次数. **输入格式要求:"%d" 提示信息:"Input n:& ...
最新文章
- 如何从Hash中删除一个键并获取Ruby / Rails中的剩余哈希?
- HDU 1565 方格取数(1) ——插头DP
- 002 PECompact 1.84
- adb 更新 android sdk,[转载]安装Android时SDK AVD MANAGER时更新报错的解决办法
- HashMap和Hashtable的区别--List,Set,Map等接口是否都继承自Map接口--Collection和Collections的区别...
- oracle 32 下载,oracle 11g 32位下载
- 免校准的电量计量芯片_交直流两用计量芯片HLW8112
- boolan 设计模式笔记
- 科软-信息安全实验3-Rootkit劫持系统调用
- opencv findContuors 详解
- CentOS下搭建docker+.net core
- Android Service中的android:process=:remote
- Centos 7.x 安装配置tomcat-8过程梳理
- solve函数c语言_c语言:回溯解数独程序
- 中山大学计算机软件专业,【广州日报】中山大学在珠海校区新成立人工智能学院和软件工程学院...
- 摩伴windows桌面服务器,魔伴windows桌面
- php删除二维数组元素_php怎样删除二维数组中的元素
- Android 11.0 下拉状态栏通知栏的通知设置默认展开
- 【C++】—— STL简介(了解)
- 最近公共祖先(LCA)Tarjan
热门文章
- php中new与构造函数,php - 在构造函数中使用“ new”关键字 - SO中文参考 - www.soinside.com...
- hadooppythonsql_实例讲解hadoop中的hive查询(python语言实现)
- linux怎么让cat运行,使用lolcat让你的Linux命令行出现七彩虹
- linux php mysql 中文_Linux下PHP+MySQL+CoreSeek中文检索引擎配置 | 系统运维
- 【Head First 设计模式】-简单工厂模式读后总结
- ggmusic java证书过期_证书过期时的Java trustmanager行为
- 字节跳动笔试题:1. 小于N的质数数量;2. 逆时针二维数组;3. 判断a+bc
- JAVA基础整理-6.Java数据类型
- jumpserver简易安装
- Mysql InnoDB事务