递归方法不返回预期结果(JAVA)



我正在帮助一名学生回答一个关于循环的问题,实际上你有两个数字x和y,你想把x到y的每个值加在一起得到一个总数。例如,5到10将打印45(5+6+7+8+9+10)。在帮助这个人的时候,我决定递归地编写程序进行一些练习,并注意到我的递归方法没有返回45,而是一直返回5。如果有人能向我解释发生了什么事,我将不胜感激!谢谢

public class forLoops {
public static void main(String[] args) {
int sum = calc(5,10);
System.out.println(sum);

}
public static int calc(int num1, int num2) {
int sum = calc(num1, num2, 0 );
return sum;
}
public static int calc(int num1, int num2, int total) {

if(num1 <= num2)
{
total += num1;
num1++;
System.out.println(num1);
calc(num1, num2,total);
}
return total;
}
}

递归调用时,将结果分配给total。这就是错误。Java是按值传递的。因此,您必须将值分配给total。

if(num1 <= num2){
total += num1;
num1++;
System.out.println(num1);
total=calc(num1, num2,total);
}

或者您可以直接返回,而不是分配给合计。

代码的问题主要是没有进行任何聚合。。返回的值

calc(num1, num2,total)

从不存储。

替换:

total += num1;
num1++;
System.out.println(num1);
calc(num1, num2,total);

带有:

num1++;
System.out.println(num1);
total = num1 + calc(num1, num2 , total);

一个简单得多的解决方案是:

public class forLoops {
public static void main(String[] args) {
int sum = calc(5,10);
System.out.println(sum);

}
public static int calc(int num1, int num2) {
if(num1 > num){ // break condition
return 0;
}
// aggregation in a recursive manner
return num1 + calc( num1+1 , num2);
}
}

最新更新