上次,我們給大家講到了兔子數(shù)列,累計(jì)平方和的特點(diǎn),即平方和也是由兔子數(shù)列構(gòu)成的,我們從之前的等式中貌似很難得到結(jié)論。為啥有這樣神奇的結(jié)論呢? 我們轉(zhuǎn)換一下思路,平方有何幾何意義,顯然平方指的是一個正方形的面積,那好,我們依照這個思路,作一個幾何圖形試試。 這下明白了吧,比如第一個等式1^2+1^2=1*2。左邊表示兩個正方形的面積,右邊表示一個長方形的面積,很顯然它們表示的是同一區(qū)塊的面積。再比最后一個等式,左邊表示上圖中六個正方形的面積之和,右邊表示圖中的大長方形的面積?,F(xiàn)在似乎明白了等式為什么成立了,但是等式右邊的這些數(shù)字為什么是斐波那契數(shù)呢? 這就是因?yàn)?,斐波那契?shù)為前兩項(xiàng)之和,我們就可以構(gòu)造上面的幾何圖形,而且這樣構(gòu)造的圖形中的長方形的邊長只能為斐波那契數(shù)。 另一個性質(zhì) 式中左邊為相鄰兩個斐波那契數(shù)的平方和,我們發(fā)現(xiàn)計(jì)算的結(jié)果全為斐波那契數(shù),也就是說對于這樣的等式我們只用它自身的數(shù)字就足夠了。但是,該式我們并沒有寫出更多的項(xiàng),大家可以思考思考,如果繼續(xù)往下寫還能否成立呢? c++的兔子數(shù)列 作為經(jīng)典的問題,c++同樣也有求解兔子數(shù)列的方案,那我們來介紹兩種最基礎(chǔ)的方式,分別是遞歸求解兔子數(shù)列以及遞推求解的方案。 遞歸 斐波那契數(shù)列是編程書中講遞歸必提的,因?yàn)樗前凑者f歸定義的。 #include using namespace std; int Fib(int n) { return n < 2="" 1="" :="" (fib(n-1)="" +=""> } int main() { for(int i=0;i<> cout<><><><> return 0; } 這是編程最方便的解法,當(dāng)然,也是效率最低的解法,原因是會出現(xiàn)大量的重復(fù)計(jì)算。為了避免這種情況,可以采用遞推的方式。 遞推 #include using namespace std; int main() { int Fib[1000]; Fib[0]=0;Fib[1]=1; for(int i=2;i<> { Fib[i]=Fib[i-1]+Fib[i-2]; cout<><><><> } return 0; } 遞推的方法可以在較短的時間內(nèi)計(jì)算出這個值了! 最后,再給大家介紹一個神奇的性質(zhì): 每3個數(shù)有且只有一個被2整除, 每4個數(shù)有且只有一個被3整除, 每5個數(shù)有且只有一個被5整除, 每6個數(shù)有且只有一個被8整除, 每7個數(shù)有且只有一個被13整除, 每8個數(shù)有且只有一個被21整除, 每9個數(shù)有且只有一個被34整除, …… 每n個數(shù)有且只有一個被Fib[n]整除! 這次的文章,給大家講了兔子數(shù)列的一些性質(zhì)的證明,以及如何在c++中求解我們的兔子數(shù)列,下次。我們將會介紹兔子數(shù)列在大自然界中的應(yīng)用! |
|