斐波那契數列(fibonacci sequence),又稱**分割數列,因數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」。具體是這樣乙個數列:1、1、2、3、5、8、13、21、34、……可以定義為以下關係:
當n>1時,這個數列第n項的值是前兩項之和
由 fibonacci 定義可得數列可遞迴地計算如下:
int fibonacci
(int n)
int fib
(int n)
return result;
}
由定義可推導出通項公式:
方法1:待定係數法構造等比數列(初等代數解法)
設常數 r , s ,使得
f( n ) - r * f(n - 1) = s * [f(n - 1) - r * f(n - 2)]
則有 r + s = 1,- r * s = 1
當 n >= 3時,有
聯立以上 n - 2 個式子可得:
可化簡且進一步轉換為:
(顯然這是乙個以 s^(n - 1) 為首項,以r^(n - 1)為末項,r / s 為公比的等比數列的各項的和)
則
方法2:待定係數法構造等比數列(初等代數解法)
方法3:母函式法
此處只詳細解釋方法一
從上述通項公式,我們可以找到很熟悉的數字
r = - ([5 ^ (1 / 2) - 1] / 2 近似等於0.618
找出幾個資料,求出前一項與後一項的比值:
1÷1=1
1÷2=0.5
2÷3=0.666
3÷5=0.6
5÷8=0.625
……144÷233=0.618025
……46368÷75025=0.6180339886
……容易得出比值越來越接近0.618,即**比
這個關係可容易證得:
f(n) + f(n + 1) = f(n + 2)
兩邊同時除以 f(n + 1),可得:
f(n) / f(n + 1) + 1 = f(n + 2) / f(n + 1)
設lim [f(n) / f(n + 1)] = lim [f(n + 1) / f(n + 2)] = x
即有 x + 1 = 1 / x
易得 x = [5 ^ (1 / 2) - 1] / 2 = 0.618
斐波那契數亦是經常出現在我們的生活中:
例一:
如圖,將數列關係轉為正方形邊長問題,可得出以上具有美感的和海螺的紋路類似,自然界中常見的松果、向日葵等的花瓣、果實排列都可以找到類似的規律
例二:求矩形面積:
如圖,矩形的長寬變化為斐波那契數列,可以得:
正方形面積之和可以轉換成求矩形的面積
例三:關於斐波那契數列對於數的整除
每2個連續的數中有且只有乙個被2整除,
每3個連續的數中有且只有乙個被3整除,
每4個連續的數中有且只有乙個被5整除,
每5個連續的數中有且只有乙個被8整除,
……每n個連續的數中有且只有乙個被f(n)整除
例四:兔子問題
被稱為兔子數列的斐波那契數列,解決的是乙個關於兔子繁殖的問題:
「……兔子在出生兩個月後,就有繁殖能力,一對兔子每個月能生出一對小兔子來。如果所有兔子都不死,那麼一年以後可以繁殖多少對兔子?」
經過對題目的分析,可以得到兔子的繁殖情況:
經過月數12
3456
78910
1112
幼仔對數10
1123
581321
3455
成兔對數01
1235
8132134
5589
總體對數11
2358
1321
3455
89144
由上表可以得出以下**來求得兔子在一段時間後的對數:
int rabbit
(int month)
return num;
}
兔子生兔子問題 斐波那契數列
題目 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子。假如兔子都不死,要求輸出一年內兔子的數量是多少。1 1 2 3 5 8 如下 兔子問題 斐波那契 public class homework05 static intfab int month stati...
java兔子問題(斐波那契數列)
題目 古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子 假如兔子都不死,問每個月的兔子總數為多少?斐波那契數列,沒乙個值都等於前兩個值之和 author gkf46762 public class rabbit public static int g...
斐波那契數列 兔子繁殖問題
古典問題 有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第3個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?演算法分析 假設給兔子的對數編號 第乙個月 1 sum 1 第二個月 1 sum 1 第三個月 1生2,sum 2 第四個月 1生3,2,sum 3 第五個月...