繁体   English   中英

使用递归java拆分数组

[英]splitting array using recursion java

我正在尝试吐一个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;

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

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;
    }
}

看起来您没有返回基本值的“基本情况”。 原样的函数将始终返回0

猜测一下,我想应该从更改它开始,以便检查是否start+1 <= end ,如果是,则返回当前值;否则,返回0。 如果未返回该索引处的值,则使用else

else {
  results = array[start];
}

我终于弄明白了。 谢谢你的帮助。 我没有你所说的基础。

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM