C 語言實現斐波那契數列,解決遞迴實現缺陷(演算法)

2021-10-23 17:34:29 字數 1668 閱讀 9821

斐波那契數列(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為空 故判斷出結束迴圈體時也應為此形式,且...