Java 遞迴
Java 遞迴
遞迴是一種函式呼叫自身的技術。這種技術提供了一種將複雜問題分解為更容易解決的簡單問題的方法。
遞迴可能有點難以理解。理解其工作原理的最佳方法是進行實驗。
遞迴示例
將兩個數字相加很容易,但將一系列數字相加則更為複雜。在下面的示例中,遞迴用於將一系列數字相加,將其分解為相加兩個數字的簡單任務。
示例
使用遞迴將所有數字加到 10。
public class Main { public static void main(String[] args) { int result = sum(10); System.out.println(result);
}public static int sum(int k) { if (k > 0) { return k + sum(k - 1); } else { return 0;
}}
}
示例解釋
當呼叫 `sum()` 函式時,它將引數 `k` 與所有小於 `k` 的數字之和相加並返回結果。當 k 變為 0 時,函式只返回 0。執行時,程式遵循以下步驟:
10 + sum(9)
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
10 + ( 9 + sum(8) )
10 + ( 9 + ( 8 + sum(7) ) )
...
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + sum(0)
10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 0
由於當 `k` 為 0 時函式不呼叫自身,程式在此停止並返回結果。
停止條件
就像迴圈可能遇到無限迴圈問題一樣,遞迴函式也可能遇到無限遞迴問題。無限遞迴是指函式永不停止呼叫自身。每個遞迴函式都應該有一個停止條件,即函式停止呼叫自身的條件。在前面的示例中,停止條件是當引數 `k` 變為 0 時。
檢視各種不同的示例有助於更好地理解這個概念。在此示例中,函式將一個起始值和結束值之間的數字範圍相加。此遞迴函式的停止條件是當 **end** 不大於 **start** 時。
示例
使用遞迴將 5 到 10 之間的所有數字相加。
public class Main { public static void main(String[] args) { int result = sum(5, 10); System.out.println(result);
}public static int sum(int start, int end) { if (end > start) { return end + sum(start, end - 1); } else { return end; } } }
開發人員在使用遞迴時應非常小心,因為它很容易編寫出永不終止的函式,或者使用過量記憶體或處理器能力的函式。然而,如果編寫正確,遞迴可以是一種非常高效且數學上優雅的程式設計方法。