使用return语句递归打印号码

时间:2019-05-29 16:33:28

标签: java recursion

我正在使用递归来打印数字直到2(数字),并且我将零(0)作为输入并递归调用它直到数字达到2。 我已经试过了这段代码,它显示了正确的输出。

class Test{
    public static void main(String[] args) {
        rec(0);
    }
    private static void rec(int num){
        if(num<=2){
            rec(++num);
        }
        System.out.println(num);
    }
}

但是我想通过以下方式做到这一点。

class Test{
    public static void main(String[] args) {
        rec(0);
    }
    private static void rec(int num){
        if(num==2){
            return;
        }
        rec(++num);
        System.out.println(num);
    }
}

预期输出:

2,1,0

但它显示:

2,1

为什么会发生?

4 个答案:

答案 0 :(得分:2)

++numnum递增,这使得代码更难理解。

尝试致电rec(num + 1);

您可能会发现终止条件需要修改为:

if (num > 2)

终止条件通常是“不执行任何操作”的情况,这里就是这种情况。

答案 1 :(得分:2)

呼叫rec(++num);时,您要先递增num,然后再打印出来。因此,当您使用0作为输入时,到打印时num将会更改为1。当num = 2开头的rec()时,打印不执行。

rec(0)打印rec(1),1

rec(1)打印rec(2),2

rec(2)什么也不打印

总输出:2,1

答案 2 :(得分:1)

发生这种情况是因为glm model不仅返回了++num,而且还像num + 1一样修改了num

您的if语句也向后。

num = num + 1

答案 3 :(得分:0)

class Test {

    public static void main(String[] args) {
        rec(0);
    }

    private static void rec(int num){
        if(num <= 2){
            rec(num + 1);
        } else return;

        System.out.println(num);
    }

}

++num-前缀递增,表示在调用System.out.println(num);之前递增。因此,首先,您检查递归调用的情况。如果条件为假-退出递归。并在印刷时增值。

在使用递归时,请尝试扩展嵌套的代码块,以使您更容易理解。