C 斐波那契數列

2021-07-12 02:18:51 字數 1509 閱讀 5167

斐波那契數列(fibonacci sequence),又稱**分割數列、因數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」,指的是這樣乙個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:

f(0)=0,(n = 0)

f(1)=1,(n = 1)

f(n)=f(n-1)+f(n-2)(n≥2,n∈n*)

斐波那契數列指的是這樣乙個數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

特別指出:第0項是0,第1項是第乙個1。

這個數列從第2項開始,每一項都等於前兩項之和。

現實生活中,運用斐波那契數列的例子很多,而且這也是面試中經常會考到的經典問題

那麼,這麼乙個看似不好想象的規律用**怎麼實現呢?

這裡有幾種方法:

遞迴實現:

《時間複雜度o(2^n)>

#include using namespace std;

long long fibonacci1(long long n) //用long long型別考慮到大數問題

else

}int main()

遞迴似乎看起來很簡單明瞭,若給的項數n較大時,其效率較低。

2.非遞迴實現:

《時間複雜度o(n)>

long long fibonacci2(int n)

long long ret = fibarray[n];

delete fibarray ;

return ret ;

}

非遞迴效率相對遞迴較高,但是兩者意義相同。

這兩種方法,都需要掌握。

下面將兩種方法整合一起:

#include using namespace std;

long long fibonacci_1(int n)//遞迴

return fibonacci_1(n - 1) + fibonacci_1(n - 2);

}void fibonacci_2(int n)//非遞迴

{    int i;

long long *fibarray = new long long[n + 1];

fibarray[0] = 0;

fibarray[1] = 1;

for (i = 2; i>n;

printf("請選擇:1.遞迴   2.非遞迴 :");

cin >> k;

if (k == 1)

for (i = 0; i若有紕漏,歡迎指正。

本文出自 「vs呂小布」 部落格,請務必保留此出處

C 斐波那契數列

斐波那契數列 fibonacci sequence 又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞迴的方法定義 f 1 1,f 2 1,f n f n 1 f n 2 n 3,n n 1.static int func int n i...

c 斐波那契數列

題目描述 faibonacci數列前幾項為 0,1,1,2,3,5,8,其規律是從第三項起,每項均等於前兩項之和。求前n項,並以每行5個數的格式輸出。輸入乙個正整數n 3 n 30 表示斐波那契數列的項數。輸出若干行,每行五個數,每個數使用10個位置輸出。樣例輸入 樣例輸出 0 1 1 2 3 5 ...

C 斐波那契數列

斐波那契數列指的是這樣乙個數列 1,1,2,3,5,8,13,21,34,55,89,144,這個數列從第三項開始,每一項都等於前兩項之和。在數學上,斐波那契數列以如下被以遞迴的方法定義 f0 0,f1 1,fn fn 1 fn 2 n 2,n n include include using nam...