我试图总结一个数组的元素。当我测试我的代码时,总和总是一个。例如,如果我输入: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];
}
}
答案 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];
}
}
}