C語言實現斐波那契數列

2021-10-03 03:45:27 字數 1331 閱讀 4494

斐波那契數,通常用 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=

1;i++

< n;

)return sum;

}

改進1:去掉對特殊資料n=0和1的判斷,讓**統一處理所有數
if

(n<2)

修改後:
int

fib2

(int n)

return sum;

}

觀察上面**,second 和 sum是一樣的,有沒有辦法節省一點記憶體呢?可以試試下面的辦法:

改進2:

int

fib3

(int n)

;for

(int i=

1;i++

< n;

)return fb_tb[n%2]

;}

這個辦法,省下了乙個變數:

sum

和兩條賦值語句 :

first = second;

second = sum;

但是增加了兩個取餘操作:%

練習過程中發生了乙個小插曲:

int

fib4

(int n)

;for

(int i=

2;i <= n;

++i)

return fb_tb[n%2]

;}

至於fib4和fib3的區別:你品,你細品。。。

為什麼不用遞迴實現斐波那契數呢?

int

fib(

int n)

else

}

雖然用遞迴看起來簡單明瞭行數少,但是仔細想想,這個辦法太費記憶體了,同時也沒有節約時間。看下圖:

這是fib(5)遞迴展開的樣子,產生了重複的計算。

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

斐波那契數列的C語言實現

經典數學問題之一 斐波那契數列,又稱 分割數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 前兩個數為1,1,之後後每個數都為為前面兩個數的相加。c語言實現 輸出斐波那契數列前n個數字 1 普通演算法 include const int test2 void int main void ...