IndexOutOfBound,同时将数组减半求和

时间:2019-03-14 01:42:35

标签: java recursion

我一直在练习递归,而我正在尝试的练习之一是通过将数组分成两半,然后下到单个元素并将其值加到累加器上来获得数组的和回到。我的代码是:

"appid": "xxxxxx"

但是,当数组的大小大于2时,我得到"app_displayname": "joywebapp2"异常,并且我知道`copyofRange(int startInc,int endExc)是[a,b)。我已经玩了很多。为什么这不起作用?既具有仅偶数因子的数组大小,又具有没有偶数的数组大小?

1 个答案:

答案 0 :(得分:1)

关于递归,我的建议是保持简单并让递归完成工作。这是一个完美的例子。您已经使解决方案变得过于复杂,并且正在追寻根本不应该发生的错误。考虑:

public static int arrayValuesSum(int[] array) {
    return arrayValuesSumRecursive(array, 0, array.length);
}

public static int arrayValuesSumRecursive(int[] array, int start, int length) {

    if (length == 0)
        return 0;

    if (length == 1)
        return array[start];

    int half = length / 2;

    return arrayValuesSumRecursive(array, start, half) + arrayValuesSumRecursive(array, start + half, length - half);
}

无需浪费时间和空间来复制和重新复制阵列。