在java语言中以递归方式查找数组中所有元素的总和

时间:2013-11-22 17:41:33

标签: java arrays recursion sum

这是我的代码:

public int sum(int[] array, int index) 
  {
    //int index is the number of elements in the array. 
       //Here is my base case:
    if (index == 0)
        return 0;
    //Now it's time for the recursion
    else
        return array[index] + sum(array, index + 1);
}

我一直在犯错误,但我不知道我做错了什么。

5 个答案:

答案 0 :(得分:8)

您的基本情况有误。它应该是:

if (index == array.length)

注意,您需要在第一次通话时通过index = 0。如果您要传递index = array.length - 1,那么保持基本情况不变,并将递归方法调用更改为传递index - 1,而不是index + 1

但是,你真的需要递归吗?我会认真地给出数百个想法,然后再为递归而不是循环来完成这项任务。

答案 1 :(得分:2)

尝试,

public static void main(String[] args){
    int arr[] = {3, 4, 6, 7};
    System.out.println(sum(arr, arr.length-1));

}

public static int sum(int[] array, int index) {
    if (index == 0) {
        return array[0];
    } else {
        return array[index] + sum(array, index - 1);
    }
}

答案 2 :(得分:1)

而不是从0到最高索引,从最高索引到0,我做(索引-1),因为你说索引是总元素,所以如果数组有10个元素,最后一个元素有索引9

public int sum(int[] array, int index) 
  {
    //int index is the number of elements in the array. 
       //Here is my base case:
    if (index == 0)
        return 0;
    //Now it's time for the recursion
    else
        return array[index-1] + sum(array, (index - 1);
}

答案 3 :(得分:0)

@ Masud - 你的代码有一个逻辑错误(我是Java初学者,很抱歉,如果我不正确的话)。

return array[index] + sum(array, index - 1);

     array[index]    
当索引从0开始时,

将收到越界错误 - 因此意味着它不会成为索引。 '指数 - 1'会工作。 此外,这将改变您的基本情况,以返回' 0' 0因为返回数组[0]将添加两次数组[0]和一个不正确的总和。

这是我的代码:

public static int sumArrayRecursion(int array[], int n){
    if (n == 0){
        return 0;
    }
    else {
        return array[n-1] + sumArrayRecursion(array, n-1);
    }
}   

答案 4 :(得分:0)

如果您使用的是Java 1.8,则可以执行以下操作

public int sum(int[] array) 
{
     return (int)array.sum();
}

甚至

{{1}}