斐波那契數列(fibonacci sequence),又稱**分割數列、因數學家萊昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「兔子數列」,其斐波那契數列數列從第3項開始,每一項都等於前兩項之和。
二、交換位置方法
當然你也可以這樣寫
數列方式
總結既然明確斐波那契數列確定基本演算法 如果你要求第n個斐波那契數列**n=n-1+n-2**
int
fib(
int n)
else
}
每次遞迴傳入的值都是n-1和n+2的值,直到n>=2
為什麼說n>=2要跳出迴圈,因為2的前面只有1,會最終導致程式少多加負數,所以要跳出來,2過了就是返回1即可
如果你覺得這樣就行了得話,
你是沒有見過如果使用這個遞迴演算法
那將計算起來有多麼的消耗計算速度 例如你要求第100斐波那契數 套入公式n=(n-1)+(n-2) 那你得先求出第99,和第98
而第99個又需要第98和第97個
而求第98個又需要第97和第96的
如果一直往下... ...
那麼越是低位你數字你會發現計算重複次數越來越多 如圖計算乙個3的重複計算次數。。emmm計算100的時候我的電腦開飛機一般,所以不演示了我就計算第30個斐波那契數列裡的3被重複計算的次數
if
(n==3)
if(n>=2)
else
![在這裡插入描述](
所以這種方法不可取
**如下
int
fib(
int n)
return c;
}
在斐波那契實列裡
1,1 ,2,3,5,8,13,21,。。。。。
先用a存1,b存1,a+b的結果2存給c
然後講a的值給b,c(結果值)給b,
然後進入下一輪的時候
先用a存1,b存2,a+b的結果3存給c
然後再講a的值給b,c(結果值)給b,
一步一步…
這的時候這個時候的數字被重複計算的次數就不存在了
return
(x >0?
f(n -1)
+f(n -2)
:1);
int a =
0, b =
1, c =
0, n =
0, s =
50, arr[50]
; arr[0]
=1;while
(s--
)int i =
1, j =4;
int sz =
sizeof
(arr)/4
-1;while
(sz--
)printf
("%d "
, arr[i]);
i++;}
當然萬變不離其宗,斐波那契數的演算法依舊是n=n-1+n-2 C語言實現斐波那契數列
斐波那契數,通常用 f n 表示,形成的序列稱為斐波那契數列。該數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。也就是 f 0 0,f 1 1 f n f n 1 f n 2 其中 n 1.給定 n,計算 f n 首先來乙個通常版本 int fib1 int n for int i ...
C語言實現列印斐波那契數列
檔名 斐波那契數列.c 功能描述 列印n項斐波那契數列 include intfibonacci int num 計算斐波那契數列第歸函式宣告 程式從主函式開始 intmain int argc,char argv else if num 0 檢查輸入的數是否為正數 else break if 1 ...
C語言 實現斐波那契( Fibonacci )數列
斐波那契數列是由數列前兩項之和決定第三項,並以此類推,逐步迭代的二階遞推數列。解決方案一 迴圈 輸入位數n,輸出前n項的數列 include intmain return0 對迴圈體演算法的理解 開始的條件為f1 f2 b三個引數,其中f1 f2有值儲存,b為空 故判斷出結束迴圈體時也應為此形式,且...