1. 程式人生 > >斐波那契數列的三種解法及時間複雜度

斐波那契數列的三種解法及時間複雜度

斐波那契數列: f(n)=f(n-1)+f(n-2)(n>2) f(0)=1;f(1)=1; 即有名的兔子繁衍問題 在本篇文章我將會給出三種解法 遞迴

(1)遞迴:函式自己呼叫自己
(2)遞迴的"缺陷":遞迴到一定程度,會發生"棧溢位"
(3)遞迴的"時間複雜度":遞迴總次數*每次遞迴的次數
(4)遞迴的"空間複雜度":遞迴的深度*每次遞迴空間的大小(注意:"每次遞迴空間的大小"是個常數,可以基本忽略不計)
    遞迴的"深度":樹的高度(遞迴的過程是一個"二叉樹"
  • 1.遞迴實現斐波那契數列
    #include<stdio.h>
    #include<stdlib.h> long long Fib(long long N) { if (N < 3) return 1; else return Fib(N - 1) + Fib(N - 2); } int main() { long long num = 0; num=Fib(10); printf("遞迴:%d\n", num); system("pause"); return 0; }
    • 執行結果: 這裡寫圖片描述
      此種方法的缺陷:重複計算的次數太多,效率低
         例如:在下圖中,F(3
      )就重複計算了 "3次" 時間複雜度:O(2^N) 空間複雜度:O(N)