簡體   English   中英

嘗試使用遞歸反轉數組時出現 StackOverflowError

[英]StackOverflowError while trying to Reverse an Array using Recursion

我已經編寫了一個用於反轉數組的遞歸方法。

它產生一個StackOverflowError ,我就是不知道為什么。 我敢肯定這很簡單,但我已經被困在這里 2 個小時試圖修復它。

我的代碼:

public static void reverseArray(char[] input, int i, int j) {
    char temp;
    if (i >= j) return;
    
    else if (i < j) {
        temp = input[i];
        input[i] = input[j];
        input[j] = temp;
        reverseArray(input, i++, j--);
    }
}

您應該在遞歸調用中將post-increment/post-decrement更改為pre-increment/pre-decrement

reverseArray(input, ++i, --j);

i++將僅更改當前方法調用的 scope 中存在的i的值,但遞歸調用接收的參數將是i初始值(同樣適用於j )。

所以基本上你傳遞了相同的索引,因此得到一個StackOverflowError

請注意,無需使用else if包裝遞歸案例。

public static void reverseArray(char[] input, int i, int j) {
    
    if (i >= j) return;
    
    char temp = input[i];
    input[i] = input[j];
    input[j] = temp;
    
    reverseArray(input, ++i, --j);
}

或者,正如@Slaw在評論中所建議的那樣,為避免混淆,您可以在進行遞歸調用時顯式添加/減去一個:

reverseArray(input, i + 1, j - 1);

嘗試將 (x++, y--) 修復為 (++x, --y)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM