繁体   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