递归方法未返回预期结果(JAVA)
我在帮助一个学生回答一个关于for循环的问题,基本上你有两个数字x和y,你想把x到y的每个值加起来得到一个总数。例如,5到10将打印45(5+6+7+8+9+10)。在帮助这个人时,我决定递归地编写程序进行一些练习,并注意到我的递归方法没有返回45,而是一直返回5。如果有人能向我解释发生了什么事,我将不胜感激!谢谢递归方法未返回预期结果(JAVA),java,recursion,Java,Recursion,我在帮助一个学生回答一个关于for循环的问题,基本上你有两个数字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 = ca
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;
}
}
forLoops的公共类{
公共静态void main(字符串[]args){
整和=计算值(5,10);
系统输出打印项数(总和);
}
公共静态整数计算(整数m1,整数m2){
整数和=计算值(num1,num2,0);
回报金额;
}
公共静态整数计算(整数m1、整数m2、整数总计){
如果(num1递归调用时,将结果赋给total。这是错误的。Java是按值传递的。因此,必须将值赋给total
if(num1 <= num2){
total += num1;
num1++;
System.out.println(num1);
total=calc(num1, num2,total);
}
if(num1代码的问题主要是没有进行任何聚合..从
calc(num1, num2,total)
永远不会被存储
替换:
total += num1;
num1++;
System.out.println(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);
}
}
也许对递归计算调用的输出做些什么,而不是放弃返回值?@azurefrog哦,天哪,你说得太对了。设置total=calc(…)修复了它。你也可以做返回计算(num1,num2,total)
在中,如果@JimGarrison,这有一个固定时间的解决方案,甚至不是迭代的。1+2+…+n=n(n+1)/2
。当然,但我的问题是递归的误用。如果你想练习使用锤子,你会想“嗯,我会用这个锤子拧一些螺丝来练习”。
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);
}
}