斐波拉切遞歸非遞歸時間複雜度對比

轉載:
以斐波那契數列爲例分析遞歸算法的時間複雜度和空間複雜度
這個很直觀https://blog.csdn.net/superwangxinrui/article/details/79626870
這個有點複雜
http://www.javashuo.com/article/p-hpncmoub-bp.html

斐波拉切數列----生兔子,青蛙跳臺階

青蛙跳臺階
題目描述
一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先後次序不同算不同的結果)。
遞歸

public class Main{
   public int JumpFloor(int target){
      if(target==1){
        return 1;
      }
      if(target==2){
         return 2;
      }
      return JumpFloor(target-1)+JumpFloor(target-2);//第一次跳一步或者第一次跳兩步,下次接着跳
   }
}

運行時間:468ms
佔用內存:9104k
時間複雜度:
在這裏插入圖片描述
在遞歸調用過程中Fib(3)被計算了2次,Fib(2)被計算了3次。Fib(1)被調用了5次,Fib(0)中被調用了3次。所以,遞歸的效率低下,但優點是代碼簡單,容易理解。
等於二叉樹節點的個數:O(2^n)
在這裏插入圖片描述
非遞歸

public class Main{
   public int JumpFloor(int target){
      if(target==1){
        return 1;
      }
      if(target==2){
         return 2;
      }
      int sum=0;
      int a=1;
      int b=2;
      for(int i=3;i<=target;i++){
      sum=a+b;
      a=b;//f(n-2)
      b=sum;//f(n-1)
      }
      return JumpFloor(target-1)+JumpFloor(target-2);//第一次跳一步或者第一次跳兩步,下次接着跳
   }
}

時間複雜度:O(n)
運行時間:15ms
佔用時間:9408k
在這裏插入圖片描述