遞迴
設計遞迴方法
在設計遞迴方法時請記住,你需要:
-
**基本情況。**這將定義遞迴何時停止並輸出結果。因子示例中的基本案例是:
if (n <= 1) { return 1; }
-
**遞迴呼叫。**在此語句中,你使用更改的引數重新呼叫該方法。上面的析例示例中的遞迴呼叫是:
else { return n * factorial(n - 1); }
輸出
在此示例中,你計算第 n 個階乘數。第一個因素是:
0! = 1
1! = 1
2! = 1 x 2 = 2
3! = 1 x 2 x 3 = 6
4! = 1 x 2 x 3 x 4 = 24
…
Java 和 Tail-call 消除
當前的 Java 編譯器(直到幷包括 Java 9)不執行尾部呼叫消除。這會影響遞迴演算法的效能,如果遞迴足夠深,則可能導致 StackOverflowError
崩潰; 在 Java 中看到深度遞迴是有問題的