Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组和中的递归错误_Java - Fatal编程技术网

Java 数组和中的递归错误

Java 数组和中的递归错误,java,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 ar

我试图总结数组的元素。当我测试我的代码时,总和总是相差一。例如,如果我输入: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]; 
    }
}
publicstaticvoidmain(字符串[]args){
int size=kbd.nextInt();
int[]myArray=新int[大小]
//用户输入数组的元素
for(int i=0;i最后一个){
返回-1;
}
否则{
int total=sumNum(数组,开始+1,结束)+数组[first];
}
}
基本情况是错误的: 假设您正在汇总
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

我相信这可以改进,而且不是尾部递归的,但是:

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

}

返回-1
在做什么?数组元素不足实际上不会影响求和,因此您应该返回0。您的代码包含大量语法错误-使其可编译,可能会解决您的问题。使用调试器和一小部分数组来查找根本原因我只是在这里编写了代码,不一定使用所有语法。我正在运行和编译这段代码。我只是需要一些帮助来找出逻辑错误,那么在sumNum中,
else
的return语句在哪里呢?