首页 文章

递归最大堆栈溢出错误

提问于
浏览
1

我正在尝试为数据结构类编写一个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

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

    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 作为结束索引 .

  • 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));
    

相关问题