斐波那契數列(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...