[資料結構(Data Structure, DS) 教學 教程 教材 Tutorial] 基礎遞迴 - 費伯那西數
YehYeh\'s Notepad yehyeh@gmail.com 

[資料結構(Data Structure, DS)] 基礎遞迴

費伯那西數

  • 用遞迴設計費伯那西數(Fibonacci Number,費氏數)演算法
    • 費伯那西數
      n 0 1 2 3 4 5 6 7 8 9 10
      Fn 0 1 1 2 3 5 8 13 21 34 55
      • F0 = 0, F1 = 1
      • F2 = F0 + F1 = 1
      • F3 = F1 + F2 = 2
      • Fn = Fn-2 + Fn-1
    • 設計遞迴
      • Base Case
        • if n = 0 return 0
        • if n = 1 return 1
      • General Case:if n > 1 return Fn-1 + Fn-2
    • 遞迴演算法
      int Fibonacci(int n)
      {
          if( n <= 1)
              return (n);
          else
              return Fibonacci(n-1) + Finonacci(n-2);
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1)
              return (n);
          else
              return Fibonacci(n-1) + Finonacci(n-2);
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1)
              return (n);
          else
              return Fibonacci(n-1) + Finonacci(n-2);
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1)
              return (n);
          else
              return Fibonacci(n-1) + Finonacci(n-2);
      }
      
    • 迴圈演算法
      int Fibonacci(int n)
      {
          if( n <= 1 )
              return n;
      
          int fa = 0, fb = 1, fn;
          for(int i = 0; i <= n; i++){
              fn = fa + fb;
              fa = fb;
              fb = fn;
          }
          return fi;
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1 )
              return n;
      
          int fa = 0, fb = 1, fn;
          for(int i = 0; i <= n; i++){
              fn = fa + fb;
              fa = fb;
              fb = fn;
          }
          return fi;
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1 )
              return n;
      
          int fa = 0, fb = 1, fn;
          for(int i = 0; i <= n; i++){
              fn = fa + fb;
              fa = fb;
              fb = fn;
          }
          return fi;
      }
      
      int Fibonacci(int n)
      {
          if( n <= 1 )
              return n;
      
          int fa = 0, fb = 1, fn;
          for(int i = 0; i <= n; i++){
              fn = fa + fb;
              fa = fb;
              fb = fn;
          }
          return fi;
      }
      
    • 問題:若執行Fibonacci(4),會呼叫Fibonacci( )幾次?
      • 費伯那西數(Fibonacci)的遞迴呼叫
      • ∴共9次