使用递归java拆分数组

时间:2014-09-28 20:58:41

标签: java recursion

我正在尝试吐出一个int数组并添加元素,但我得到了错误。这是我的代码。我无法弄清楚。

int arraySize = 10;
int[] numsToSum = new int[arraySize];
for (int i = 0; i < arraySize; i++)
{
    numsToSum[i] = i * 3;
    System.out.println(numsToSum[i]);
}
int sum3 = sumArray3(numsToSum, 0, arraySize - 1);
System.out.println(sum3);

 public static int sumArray3(int [] array, int start, int end)
 {
    int results = 0;
    int mid = (start + end)/2;
    if(array.length > 0)
    {

        results += sumArray3(array, start + 1, mid) + sumArray3(array, mid +1,   end);

    }
    return results;

3 个答案:

答案 0 :(得分:3)

您没有递归终止条件,在这种情况下,我假设您要检查阵列的开始和结束计数器是否相同。请检查以下代码。

class StackOv {

    public static void main(String[] args) {
        int arraySize = 10;
        int[] numsToSum = new int[arraySize];
        for (int i = 0; i < arraySize; i++)
        {
                numsToSum[i] = i * 3;
                System.out.println(numsToSum[i]);
        }
        int sum3 = sumArray3(numsToSum, 0, arraySize - 1);
        System.out.println(sum3);
    }

    public static int sumArray3(int [] array, int start, int end)
    {
        int results = 0;
        if(start == end)
            return array[start];
        int mid = (start + end)/2;
        if(array.length > 0) {
                results += sumArray3(array, start, mid) + sumArray3(array, mid +1, end);
        }
        return results;
    }
}

答案 1 :(得分:0)

看起来你没有&#34;基本情况&#34;,你返回一个可靠的值。您的函数将始终返回0

猜测一下,我会说你应该先改变它,以便检查是否start+1 <= end,如果是,则返回当前值;如果没有使用else

返回该索引处的值
else {
  results = array[start];
}

答案 2 :(得分:0)

我终于明白了。谢谢你的帮助。我没有像你说的基地。

public static int sumArray3(int [] array, int start, int end)
{
    int results = 0;
    int mid = (start + end)/2;
    if(start < end)
    {
        results += sumArray3(array, start, mid) + sumArray3(array, mid +1, end);

    }
    else
        results = array[start];
    return results;
}