遞迴

設計遞迴方法

在設計遞迴方法時請記住,你需要:

  • **基本情況。**這將定義遞迴何時停止並輸出結果。因子示例中的基本案例是:

    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 中看到深度遞迴是有問題的