斐波那契数列之美

斐波那契是一位数学家,生于公元1170年,籍贯大概是比萨,卒于1240年后。1202年,他撰写了《珠算原理》(Liber Abaci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。斐波那契数列因他解决兔子繁殖的应用题而引入,故又称为“兔子数列”。除此之外,他对欧洲数学的另一大贡献就是引进阿拉伯数字,从而取代了复杂的罗马计数法。

有这样一个数列:1、1、2、3、5、8、13、21、34……前两个元素为1,其他元素均为前两个元素和。在数学上以如下递归的方法定义:

这就是斐波那契数列的数学定义。

奇妙的属性

随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887……

从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1。(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如第四项3是奇数,但它是偶数项,第五项5是奇数,它是奇数项,如果认为数字3和5都是奇数项,那就误解题意,怎么都说不通)

如果你看到有这样一个题目:

某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了斐波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到。

斐波那契数列的第n项同时也代表了集合{1,2,...,n}中所有不包含相邻正整数的子集个数。

斐波那契数列(f(n),f(0)=0,f(1)=1,f(2)=1,f(3)=2……)的其他性质:

f(0)+f(1)+f(2)+…+f(n)=f(n+2)-1

f(1)+f(3)+f(5)+…+f(2n-1)=f(2n)

f(2)+f(4)+f(6)+…+f(2n) =f(2n+1)-1

[f(0)]^2+[f(1)]^2+…+[f(n)]^2=f(n)·f(n+1)

f(0)-f(1)+f(2)-…+(-1)^n·f(n)=(-1)^n·[f(n+1)-f(n)]+1

f(m+n-1)=f(m-1)·f(n-1)+f(m)·f(n)

利用这一点,可以用程序编出时间复杂度仅为O(log n)的程序。怎样实现呢?伪代码描述一下?

[f(n)]^2=(-1)^(n-1)+f(n-1)·f(n+1)

f(2n-1)=[f(n)]^2-[f(n-2)]^2

3f(n)=f(n+2)+f(n-2)

f(2n-2m-2)[f(2n)+f(2n+2)]=f(2m+2)+f(4n-2m) [ n〉m≥-1,且n≥1]

f(2n+1)=[f(n)]^2+[f(n+1)]^2

算法之矩阵计算斐波那契数列

从第三项开始,每一项都是前两项之和。 F(n)=F(n−1)+F(n−2), n⩾3 把斐波那契数列中 相邻的两项F(n)和F(n−1)写成一个2×1的矩阵。

求F(n)等于求二阶矩阵的n - 1次方,结果取矩阵第一行第一列的元素。

问题转换为二阶矩阵的n次幂。而计算二阶矩阵的N次幂运算,由于二阶矩阵乘法满足结合律,这样,可以快速计算二阶矩阵的n次幂运算。

假设A为一个二阶矩阵,则A的幂运算满足下面的条件:

A**6=A**3∗A**3

A**7=A**3∗A**3∗A**1=A**4*A**2*A**1

可以类似地把A看做是二进制中的2,2**7=2**4*2**2*2**1也就是说可以把矩阵的幂转换成二进制来表示。从而可以将n次幂拆解成长度为logn的二进制数来表示:7=111(二进制)。这就是快速求二阶矩阵的核心方法。

代码实现:

完整代码:

斐波那契数列的应用

c语言斐波那契数列_神奇的数列——斐波那契数列相关推荐

  1. python编写递归函数、求斐波那契数列_利用Python实现斐波那契数列的方法实例

    今天我们来使用Python实现递归算法求指定位数的斐波那契数列 首先我们得知道斐波那契数列是什么? 斐波那契数列又叫兔子数列 斐波那契数列就是一个数列从第三项开始第三项的值是第一项和第二项的和依次类推 ...

  2. c语言斐波那契数列_剑指Offer-10-I.斐波那契数列

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

  3. 循环斐波那契数列_每日一课 | 斐波那契数列的第n个项

    Python程序借助两种方法来计算斐波那契数列的第n个项 (有许多方法可以计算第n个项). 描述: 第一种方法:动态编程 在这种方法中,我们计算出斐波那契数列直到n的所有项,如果我们需要计算小于n的任 ...

  4. java斐波那契优化_用HashMap优化斐波那契数列 java算法

    斐波那契是第一项为0,第二项为1,以后每一项是前面两项的和的数列. 源码:Fibonacci.java public class Fibonacci{ private static int times ...

  5. python实现斐波那契数列_斐波那契数列:python实现和可视化

    1 说明 ==== 1.1 斐波那契数列的介绍. 1.2 斐波那契数列是上帝的指纹,大自然中随处可见,目前广泛应用到黄金分割线的布局美和股市等预测等等. 1.3 斐波那契数列的Python的matpl ...

  6. python查询斐波那契数列通项公式_分享一个神奇的操作系统——斐波那契+MACD,每一波都有20%以上的收益!...

    斐波那契数列,又称兔子数列,或者黄金分割数列.指的是这样一个数列: 0.1.1.2.3.5.8.13.21--从第三项起,它的每一项都等于前两项的和. 为什么是兔子数列?我们假设兔子在出生两个月后,就 ...

  7. 斐波那契数列前20项_短线交易的秘诀——斐波那契数列,数学界的“完美”公式!...

    斐波拉契数列一直被认为是大自然中的神奇异数. 它的相邻两项之商趋近黄金分割0.618,与之相关的0.191.0.382和0.500等数字,构成了股市中市场时间和空间计算的重要节点. 金融市场的时间和价 ...

  8. python编写递归函数、求斐波那契数列第n项的值_用递归函数求斐波那契数列的第n项的值...

    展开全部 #include int Fibonacci(int n) { if( n == 1 || n == 2) // 递归结束的条件,求前两项 return 1; else return Fib ...

  9. 斐波那契数列前20项_分享一个神奇的操作系统——斐波那契+MACD,每一波都有20%以上的收益!...

    斐波那契数列,又称兔子数列,或者黄金分割数列.指的是这样一个数列: 0.1.1.2.3.5.8.13.21--从第三项起,它的每一项都等于前两项的和. 为什么是兔子数列?我们假设兔子在出生两个月后,就 ...

最新文章

  1. 点石关键词排名优化软件_关键词点击排名优化
  2. 查看约束信息_【华智产品汇】育种信息安全的守护者——华智育种管家
  3. 计算机应用基础随堂,《计算机应用基础》随堂题库
  4. ASP.NET在IIS7中上下文中不可用
  5. emacs 新手笔记(四) —— 使用 dired 完成一些简单的文件和目录操作
  6. matplotlib 高阶之Transformations Tutorial
  7. 信息学奥赛C++语言:哥德巴赫猜想
  8. Windows网络编程——查询本机的主机名称及IP地址(控制台应用程序)
  9. x,y直角坐标系转经纬度WGS-84坐标系
  10. 解决object at 0x01DB75F0
  11. 2017 多校4 Dirt Ratio
  12. U盘文件变成exe格式的解决办法
  13. Android 模拟器 Root 和 SuperSU 安装
  14. 不小心被拉进QQ诈骗群之后
  15. 拖拉机服务器不稳定,手扶拖拉机机油指示不稳定现象分析
  16. 一文告诉你哪些map element类型支持就地更新
  17. iOS 支付宝支付 微信支付SDK接口不统一? 盘他!
  18. java生成word(报告报表)含统计图表图片、循环表格,Spring Boot整合word生成
  19. 关于Datatable删除行和删除列
  20. Github学生包的申请

热门文章

  1. Android 反编译apk文件(转)
  2. IOS基础之计算器的编写
  3. css中改变边距会影响原大小,CSS:更改父容器中子项的边距会改变子项的宽度吗?...
  4. OWASP Mutillidae II:保持冷静并保持警惕——闯关小结
  5. python从基础到入门电子书_零基础如何学好python?一本python从入门到实践电子书籍赠送...
  6. linux自动获取ip网卡配置文件,linux 命令行下配置网卡自动获取 IP
  7. 量子计算机能让科技发展有多快,量子计算机有多快?
  8. android 双人黑白棋开发博客,黑白棋 - 软件资讯 - 课堂党年级博客
  9. 大表ddl工具online-schema-change使用
  10. C#单例---饿汉式和懒汉式