递归以使用 return 语句打印数字



我使用递归来打印数字,直到 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

为什么会这样?

++num递增num,这(如此处(使代码更难理解。

请尝试改为拨打rec(num + 1);

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

if (num > 2)

终止条件通常是"不执行任何操作"的情况,此处就是这种情况。

当你调用rec(++num);时,你在打印之前递增num。因此,当您使用0作为输入时,到打印时num将更改为 1 .当num = 2 rec()开始时,打印不会执行。

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

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

rec(2)不打印任何内容

总产量:2,1

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

你的 if 语句也是倒退的。

public class Test {
  public static void main(String[] args) {
    rec(0);
  }
  private static void rec(int num) {
    if (num < 2) {
      rec(num + 1);
    }
    System.out.println(num);
  }
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);之前递增。因此,首先,您检查递归调用的情况。如果条件为假 - 退出递归。并在打印价值时。

当你使用递归时,试着展开嵌套的代码块,这样你就会理解得更简单。

最新更新