数组求和中的递归错误

时间:2015-02-02 20:24:56

标签: java

我试图总结一个数组的元素。当我测试我的代码时,总和总是一个。例如,如果我输入:20,40,30它给我89而不是90.我不确定我做错了什么。如果有人能指出我正确的方向,这将是伟大的!谢谢

这是我到目前为止所做的:

public static void main(String[] args){
    int size = kbd.nextInt();
    int [] myArray = new int [size]
    //user inputs the elements of array
    for(int i =0; i<myArray.length; i++){
        myArray[i]= kbd.nextInt();
    }
    int total = sumNum(myArray,0, myArray.length-1)
    System.out.println("The sum is"+ total);
}

public static int sumNum(int [] array, int begin, int end){
    if(begin > last) {
        return -1; 
    }
    else {
        int total = sumNum(array, begin +1, end)+ array[first]; 
    }
}

2 个答案:

答案 0 :(得分:1)

基本案例错误: 假设你正在总结int[] A = {1},并扩展你的递归函数调用如下:

sumNum(A, 0, 0) = sumNum(A, 1, 0) + A[0] = -1 + A[0]

您看,最后sumNum(A, 1, 0)返回-1,我们得到A[0] - 1

所以正确的解决方案是sumNum(A, 1, 0)返回0

答案 1 :(得分:0)

我确信这可以改进,而不是尾递归但是如何:

   public class Recurs {

    public static void main(String[] args){

        int [] myArray = new int[]{20,40,30} ;

        int total = sumNum(myArray,0);

        System.out.println("The sum is "+ total);
    }

    public static int sumNum(int [] array, int begin){
        if(begin == array.length) {
            return 0; 
        }
        else {
            return sumNum(array, begin + 1) + array[begin];
        }
    }

}