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

时间:2017-11-14 20:32:44

标签: java recursion

我正在帮助学生解决关于for循环的问题,基本上你有2个数字x和y,你想要将x到y的每个值加起来得到总数。例如,5到10将打印45(5 + 6 + 7 + 8 + 9 + 10)。在帮助这个人的同时,我决定以递归的方式编写程序进行一些练习并注意到我的递归方法没有返回45,而是只是一直返回5.如果有人能够向我解释我在做什么&# 39;欣赏它!谢谢!

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;
    }

}

2 个答案:

答案 0 :(得分:0)

以递归方式调用时,将结果指定为total。那是错误的。 Java是按值传递的。因此,您必须将值分配给总计。

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

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

答案 1 :(得分:0)

您的代码问题主要是没有进行任何聚合..从

返回的值
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);
    }
}