利用Python和纯数学方法生成斐波那契数列
2018-01-22 22:02
525 查看
发现CSDN上没有相似的文章,第一次写分享,有不足请见谅
仅从纯数学的方法上设计得到斐波那契数列,共两种大同小异的方法。
1. 使用fai1, fai2(具体定义见下文)
斐波那契数列和黄金分割率φ及其共轭数(该字母不知道如何输入)有关,有:
黄金分割率 fai1 = (1+5^0.5)/2 = 1.661803...
黄金分割率的共轭 fai2 = (1-5^0.5)/2 = -0.61803...
Fi为斐波那契数列的第i个数,i从0开始,有F(0)=0,F(1)=1,有:
Fi = (fai1 - fai2)/ (5^0.5)
代码如下:
2. 只使用fai1
因为|fai2|<1
可以使用归纳法证明 (|fai2^i| / 5^0.5) < 1 /( 5^0.5) < 1 / 2
所以一定有Fi = floor((|fai1^i| / 5^0.5)+ 1 / 2 ),即Fi等于(|fai1^i| / 5^0.5)舍入到最近的整数
代码如下:
总结:
一个根据数学公式的尝试,在只需要斐波那契数列中的第i项时,感觉比较适用。
仅从纯数学的方法上设计得到斐波那契数列,共两种大同小异的方法。
1. 使用fai1, fai2(具体定义见下文)
斐波那契数列和黄金分割率φ及其共轭数(该字母不知道如何输入)有关,有:
黄金分割率 fai1 = (1+5^0.5)/2 = 1.661803...
黄金分割率的共轭 fai2 = (1-5^0.5)/2 = -0.61803...
Fi为斐波那契数列的第i个数,i从0开始,有F(0)=0,F(1)=1,有:
Fi = (fai1 - fai2)/ (5^0.5)
代码如下:
def fib(b): a = [] fai1 = (1 + 5 ** 0.5) / 2 fai2 = (1 - 5 ** 0.5) / 2 for i in range(n): f = (fai1 ** i - fai2 **i) / (5 ** 0.5) a.append(int(f)) return a n = 11 A = fib(n) print(A)
# 结果为:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
2. 只使用fai1
因为|fai2|<1
可以使用归纳法证明 (|fai2^i| / 5^0.5) < 1 /( 5^0.5) < 1 / 2
所以一定有Fi = floor((|fai1^i| / 5^0.5)+ 1 / 2 ),即Fi等于(|fai1^i| / 5^0.5)舍入到最近的整数
代码如下:
def fib(b): a = [] fai1 = (1 + 5 ** 0.5) / 2 for i in range(n): f = round((fai1 ** i) / (5 ** 0.5)) a.append(int(f)) return a n = 13 A = fib(n) print(A)
# 结果为:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
总结:
一个根据数学公式的尝试,在只需要斐波那契数列中的第i项时,感觉比较适用。
相关文章推荐
- 利用python程序生成word和PDF文档的方法
- python 斐波那契数列的生成,两种方法对比
- 利用python生成一个导出数据库的bat脚本文件的方法
- 利用Python脚本生成sitemap.xml的实现方法
- 利用Python生成文件md5校验值函数的方法
- 利用python3随机生成中文字符的实现方法
- Asp.net_关于如何利用编译器把[.cs]文件生成动态链接库[.dll]文件方法的总结
- [python]利用Python生成xml文件
- 能利用myeclipse自动生成WSDL对Java类中方法的返回值是有要求的
- Qemu中生成针对具体体系结构的纯净代码的方法---利用GCC的-E选项
- LRUCache的实现原理及利用python实现的方法
- 利用Python实现Fibonacci序列算法的三种方法
- 【Python入门】02—代码打包生成EXE文件的方法
- 利用zabbix生成awstats日志分析图表并用Python调用zabbix API批量添加item 推荐
- Python生成8位随机字符串的方法分析
- 如何利用深度学习写诗歌(使用Python进行文本生成)
- 利用python求相邻数的方法示例
- python中利用xml.dom模块解析xml的方法教程
- 使用Python生成源文件的两种方法
- 利用python批量修改word文件名的方法示例