遞迴的基本思想

什麼是遞迴:

通常,遞迴是函式直接或間接呼叫自身的時間。例如:

// This method calls itself "infinitely"
public void useless() {
    useless();  // method calls itself (directly)
}

將遞迴應用於問題的條件:

使用遞迴函式解決特定問題有兩個前提條件:

  1. 問題必須有一個基本條件,它將是遞迴的端點。當遞迴函式達到基本條件時,它不再進行(更深)遞迴呼叫。

  2. 每個級別的遞迴都應該嘗試一個較小的問題。因此遞迴函式將問題分成越來越小的部分。假設問題是有限的,這將確保遞迴終止。

在 Java 中有第三個前提條件:沒有必要過於徹底地解決問題; 在 Java 中看到深度遞迴是有問題的

以下函式使用遞迴計算階乘。注意方法 factorial 如何在函式內呼叫自身。每當它呼叫自身時,它將引數 n 減少 1.當 n 達到 1(基本條件)時,函式將不再遞迴。

public int factorial(int n) {
    if (n <= 1) { // the base condition 
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

這不是計算 Java 中因子的實用方法,因為它沒有考慮整數溢位,或者對於 n 的大值呼叫堆疊溢位(即 StackOverflowError 異常)。