我编写了一个递归函数来总结数组中的元素。我对以下程序的行为方式感到困惑和困惑。
public class Recursion{
private static int array[] = new int[]{4,6,7,2,3};
public static void main(String argv[]){
int result = sum(0 , 5);
System.out.println("The result is "+result);
}
private static int sum(int number, int index){
if (index==0){
return 0;
}
return number + sum(array[index-1], index-1) ;
}
}
上述程序返回18作为答案。有人可以详细说明上述程序,因为我出错了。
答案 0 :(得分:2)
如上所述,调用树扩展为:
sum(0, 5)
0 + sum(3, 4)
0 + 3 + sum(2, 3)
0 + 3 + 2 + sum(7, 2)
0 + 3 + 2 + 7 + sum(6, 1)
0 + 3 + 2 + 7 + 6 + sum(4, 0)
0 + 3 + 2 + 7 + 6 + 0
sum(4, 0)
符合条件index==0
,因此返回0.它应返回number
,即4。
if (index==0){
return number;
}
答案 1 :(得分:1)
您正在跳过总和中数组的第一个元素。到达递归结束时返回array[0]
:
private static int sum(int number, int index){
if (index==0){
return array[0];
}
return number + sum(array[index-1], index-1) ;
}
答案 2 :(得分:1)
您没有添加数组中第一个位置的值。
而不是:
if (index==0){
return 0;
}
尝试返回array[index]
或number
而不是0。