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