快捷搜索:  汽车  科技

斐波那契数列的计算规律:神奇的数列斐波那契数列

斐波那契数列的计算规律:神奇的数列斐波那契数列斐波那契数列(f(n),f(0)=0,f(1)=1,f(2)=1,f(3)=2……)的其他性质:斐波那契数列的第n项同时也代表了集合{1 2 ... n}中所有不包含相邻正整数的子集个数。从第二项开始,每个奇数项的平方都比前后两项之积多1,每个偶数项的平方都比前后两项之积少1。(注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如第四项3是奇数,但它是偶数项,第五项5是奇数,它是奇数项,如果认为数字3和5都是奇数项,那就误解题意,怎么都说不通)如果你看到有这样一个题目:某人把一个8*8的方格切成四块,拼成一个5*13的长方形,故作惊讶地问你:为什么64=65?其实就是利用了斐波那契数列的这个性质:5、8、13正是数列中相邻的三项,事实上前后两块的面积确实差1,只不过后面那个图中有一条细长的狭缝,一般人不容易注意到。

斐波那契数列之美

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

斐波那契数列的计算规律:神奇的数列斐波那契数列(1)

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

斐波那契数列的计算规律:神奇的数列斐波那契数列(2)

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

斐波那契数列的计算规律:神奇的数列斐波那契数列(3)

奇妙的属性

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

斐波那契数列的计算规律:神奇的数列斐波那契数列(4)

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

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

代码实现:

斐波那契数列的计算规律:神奇的数列斐波那契数列(5)

完整代码:

斐波那契数列的计算规律:神奇的数列斐波那契数列(6)

斐波那契数列的应用

斐波那契数列的计算规律:神奇的数列斐波那契数列(7)

猜您喜欢: