方法
一、簡單遞迴
這個就不說了,小n怡情,大n傷身啊……當n=40的時候,就明顯感覺到卡了,不是一般的慢。
1方案二、動態規劃//輸出第n個 fibonacci 數
2 #include 3
using
namespace
std;45
long
long fibonacci(intn)6
1011
12int
main()
13
1【以上程式可以優化:既然只要求輸出第n個斐波納契數f(n),則只需用兩個變數記錄f(n-1)和f(n-2),不用開陣列將整個1到n的斐波納契數列都記錄下來。】//輸出第n個 fibonacci 數
2 #include 3 #include 4
#define maxn 300
5using
namespace
std;67
long
long
f[maxn];
8inti;9
long
long fibonacci(int
n)1021}
2223
24int
main()
2535
return0;
36 }
最開始忘了 if(f[n]==0) 這個判斷(17行),導致了很多次的重複計算——和遞迴演算法一樣多的次數。
以下是程式執行截圖,上圖為正確程式,下圖為漏掉了 if(f[n]==0) 這個判斷的錯誤程式。可以看出執行時間上的巨大差距:
當輸入n=100時,錯誤的程式很長很長一段時間內都還沒計算出來。
方法三、for迴圈 + 陣列
速度也非常快。
1//輸出第n個 fibonacci 數
2 #include 3 #include 4
#define maxn 300
5using
namespace
std;67
long
long
f[maxn];
8long
long fibonacci(intn)9
19}2021
22int
main()
2330
return0;
31 }
斐波納契數
斐波納契數 指斐波那契 leonardo fibonacci,約1175 約1240 發現的數。在1202年斐波納契的著作 算盤書 裡記載著兩道有趣的題目。坐落在義大利比薩的斐波那契雕像 第乙個題目 有七個老婦人正去往羅馬。她們每個人都拉著七匹騾子,每匹騾子馱七個袋子,每個袋子裡有七個麵包,每個麵包...
求第n個斐波拉契數
首先介紹斐波那契數列,斐波那契數列的排列是 1,1,2,3,5,8,13,21,34,55,89,144 依次類推下去,你會發現,它後乙個數等於前面兩個數的和。在這個數列中的數字,就被稱為斐波那契數。如果要找出其中任意乙個數,可以用下面兩種演算法解決 用遞迴法 define crt secure n...
求出第N個斐波那契數
一 知識普及 神魔是斐波那契數列 斐波那契數列 fibonacci sequence 又稱 分割 數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數...