以斐波那列數列來理解尾遞迴

2021-09-27 09:45:17 字數 879 閱讀 8266

斐波那契數列的概念可以參考。

數列內容為  1 1 3 5 8 13 .......

1.用普通遞迴演算法

static int function(int n)

return function(n-1)+function(n-2);

}

測試50項耗時:

數值為負數是由於溢位。

這種方式是由於棧空間占用導致耗時。

2.採取尾遞迴方式

從尾部開始,將計算的值儲存起來用引數傳入,節省棧空間從而提高效率

演算法為:

static int fibonacci(int n, int value, int result) 

else

}

測試50項耗時:

相比於正常遞迴尾遞迴效率要快得多。

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...