Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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_Recursion - Fatal编程技术网

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

递归方法未返回预期结果(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

我在帮助一个学生回答一个关于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 = 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);
    }
}