c语言斐波那契数列_神奇的数列——斐波那契数列

斐波那契数列之美

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

ff4b4fffd32f9b1087b0094bd16fd402.png

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

901184d19dbba2f95622082516a5b5b8.png

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

15ebf6c00041c4574a6e826e638c2f1b.png

奇妙的属性

随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值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

3aed314abe3caa8c33344c205b3a9a19.png

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

从第三项开始,每一项都是前两项之和。 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(二进制)。这就是快速求二阶矩阵的核心方法。

代码实现:

cbdb75250550530a464672759dd847b7.png

完整代码:

58296edc2d6d80d2fa97ebcc13330d53.png

斐波那契数列的应用

a39596baf72441d863dada51e4b3890f.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值