斐波那契數列的概念可以參考。
數列內容為 1 1 3 5 8 13 .......
1.用普通遞迴演算法
static int function(int n)測試50項耗時:return function(n-1)+function(n-2);
}
數值為負數是由於溢位。
這種方式是由於棧空間占用導致耗時。
2.採取尾遞迴方式
從尾部開始,將計算的值儲存起來用引數傳入,節省棧空間從而提高效率
演算法為:
static int fibonacci(int n, int value, int result)測試50項耗時:else
}
相比於正常遞迴尾遞迴效率要快得多。
main方法測試**
long now = system.currenttimemillis();可以考慮改些下階乘的遞迴為尾遞迴 - -// system.out.println(function(50));
system.out.println(fibonacci(50,1,1));
system.out.println("耗時:"+(system.currenttimemillis()-now));
斐波那契數列求解 尾遞迴
1.普通遞迴 這裡觀察f 4 的遞迴樹代替f 10 的遞迴樹 後者比較大,畫不下 使用遞迴求解的時候複雜度為t n t n 1 t n 2 t n t n 1 t n 2 t n t n 1 t n 2 觀察遞迴樹,發現降速最快的是最右邊每次減2,因此n 2 frac 2n 層以上的部分肯定是滿二叉...
斐波那契 尾遞迴
1 計算任意數n的階乘 5 5 4 3 2 1 8 8 7 6 5 4 3 2 1 遞迴函式通過兩個條件出發回的過程 1 當前函式徹底執行完畢的時候,觸發回的過程,回到上一層函式的呼叫處 2 當前函式遇到return 返回值的時,觸發回的過程,回到上一層函式的呼叫處 普通方法 n 5 total 1...
斐波那契 尾遞迴,DP
先看斐波拉契遞迴的樸素版本 int fib1 int n 這段 的意思是 第n個數等於前兩個數之和。但 f 1 1,f 0 0,這兩個特殊值作為遞迴出口。優化 尾遞迴 int fib wei int n int a,int b intmain 這段 明顯可讀性比樸素版本低,但優點在於將時間複雜度從o...