递归最大堆栈溢出错误

时间:2015-04-11 13:59:32

标签: java recursion stack stack-overflow

我正在尝试为数据结构类编写一个3输入递归程序,用于max和min。我收到堆栈溢出错误。我不知道我是否要离开阵列的末尾,但我不应该达到我的理解。任何帮助,将不胜感激。这是我的代码:

class Extrema {

    // maxArray()
    // returns the largest value in int array A
    // p is position zero, r is position length-1
    static int maxArray(int[] A, int p, int r) {
        int q;
        if (p == r) {
            return A[p];
        } else {
            q = (p + r)/2;
            return max(maxArray(A, p, q-1), maxArray(A, q+1, r));
        }
    }

    // max()
    // returns the largest value of two ints
    private static int max(int a, int b) {
        return a > b ? a : b;
    }

    // main()
    public static void main(String[] args) {
        int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7};
        System.out.println( "max = " + maxArray(B, 0, B.length-1) );  // output: max = 11
    } 
}

2 个答案:

答案 0 :(得分:0)

更改此代码

if (p == r) {
    return A[p];
}

if (p >= r) {
    return A[p];
}

并注意当你调用语句

return max(maxArray(A, p, q-1), maxArray(A, q+1, r));

你输了 q 元素,所以请致电

return max(maxArray(A, p, q), maxArray(A, q+1, r));

答案 1 :(得分:0)

要么非递归,因为递归在这里没有任何意义:

static int maxArray(int[] A, int p, int r)  {
    int max = A[p];
    for (int i = p + 1; i <= r; i++) {
        if (A[i] > max)
            max = A[i];
    }
    return max;
}

或者如果你坚持某种递归,只需稍加改动即可使用你的代码:

return max(maxArray(A, p, q), maxArray(A, q+1, r));

请注意,对第一个maxArray函数的调用现在被传递q而不是q-1作为结束索引。