輸出第 n 個斐波納契數(Fibonacci)

2022-04-10 05:56:56 字數 1438 閱讀 8375

方法

一、簡單遞迴

這個就不說了,小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個 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 }

【以上程式可以優化:既然只要求輸出第n個斐波納契數f(n),則只需用兩個變數記錄f(n-1)和f(n-2),不用開陣列將整個1到n的斐波納契數列都記錄下來。】

最開始忘了 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 在數學上,斐波納契數...