c语言斐波那契数列_神奇的数列——斐波那契数列
斐波那契數(shù)列之美
斐波那契是一位數(shù)學(xué)家,生于公元1170年,籍貫大概是比薩,卒于1240年后。1202年,他撰寫了《珠算原理》(Liber Abaci)一書。他是第一個研究了印度和阿拉伯?dāng)?shù)學(xué)理論的歐洲人。斐波那契數(shù)列因他解決兔子繁殖的應(yīng)用題而引入,故又稱為“兔子數(shù)列”。除此之外,他對歐洲數(shù)學(xué)的另一大貢獻(xiàn)就是引進(jìn)阿拉伯?dāng)?shù)字,從而取代了復(fù)雜的羅馬計(jì)數(shù)法。
有這樣一個數(shù)列:1、1、2、3、5、8、13、21、34……前兩個元素為1,其他元素均為前兩個元素和。在數(shù)學(xué)上以如下遞歸的方法定義:
這就是斐波那契數(shù)列的數(shù)學(xué)定義。
奇妙的屬性
隨著數(shù)列項(xiàng)數(shù)的增加,前一項(xiàng)與后一項(xiàng)之比越來越逼近黃金分割的數(shù)值0.6180339887……
從第二項(xiàng)開始,每個奇數(shù)項(xiàng)的平方都比前后兩項(xiàng)之積多1,每個偶數(shù)項(xiàng)的平方都比前后兩項(xiàng)之積少1。(注:奇數(shù)項(xiàng)和偶數(shù)項(xiàng)是指項(xiàng)數(shù)的奇偶,而并不是指數(shù)列的數(shù)字本身的奇偶,比如第四項(xiàng)3是奇數(shù),但它是偶數(shù)項(xiàng),第五項(xiàng)5是奇數(shù),它是奇數(shù)項(xiàng),如果認(rèn)為數(shù)字3和5都是奇數(shù)項(xiàng),那就誤解題意,怎么都說不通)
如果你看到有這樣一個題目:
某人把一個8*8的方格切成四塊,拼成一個5*13的長方形,故作驚訝地問你:為什么64=65?其實(shí)就是利用了斐波那契數(shù)列的這個性質(zhì):5、8、13正是數(shù)列中相鄰的三項(xiàng),事實(shí)上前后兩塊的面積確實(shí)差1,只不過后面那個圖中有一條細(xì)長的狹縫,一般人不容易注意到。
斐波那契數(shù)列的第n項(xiàng)同時也代表了集合{1,2,...,n}中所有不包含相鄰正整數(shù)的子集個數(shù)。
斐波那契數(shù)列(f(n),f(0)=0,f(1)=1,f(2)=1,f(3)=2……)的其他性質(zhì):
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)
利用這一點(diǎn),可以用程序編出時間復(fù)雜度僅為O(log n)的程序。怎樣實(shí)現(xià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
算法之矩陣計(jì)算斐波那契數(shù)列
從第三項(xiàng)開始,每一項(xiàng)都是前兩項(xiàng)之和。 F(n)=F(n?1)+F(n?2), n?3 把斐波那契數(shù)列中 相鄰的兩項(xiàng)F(n)和F(n?1)寫成一個2×1的矩陣。
求F(n)等于求二階矩陣的n - 1次方,結(jié)果取矩陣第一行第一列的元素。
問題轉(zhuǎn)換為二階矩陣的n次冪。而計(jì)算二階矩陣的N次冪運(yùn)算,由于二階矩陣乘法滿足結(jié)合律,這樣,可以快速計(jì)算二階矩陣的n次冪運(yùn)算。
假設(shè)A為一個二階矩陣,則A的冪運(yùn)算滿足下面的條件:
A**6=A**3?A**3
A**7=A**3?A**3?A**1=A**4*A**2*A**1
可以類似地把A看做是二進(jìn)制中的2,2**7=2**4*2**2*2**1也就是說可以把矩陣的冪轉(zhuǎn)換成二進(jìn)制來表示。從而可以將n次冪拆解成長度為logn的二進(jìn)制數(shù)來表示:7=111(二進(jìn)制)。這就是快速求二階矩陣的核心方法。
代碼實(shí)現(xiàn):
完整代碼:
斐波那契數(shù)列的應(yīng)用
總結(jié)
以上是生活随笔為你收集整理的c语言斐波那契数列_神奇的数列——斐波那契数列的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统不能启动怎么办
- 下一篇: 数据结构实验之图论四:迷宫探索_用图机器