为什么我的代码的最后一行执行的时间超过一次?

时间:2015-11-28 22:03:47

标签: java

我写了一个输出类似" 01234567891010987654321"的程序。但问题是我没有理解为什么会这样。你能解释一下输出的最后一行吗。

我的代码是:

class Demo{

  public static void main(String[] args) {

    int i = 0;
    show(i);

  }

  public static void  show(int i) {
    if(i<=9)
    {
      System.out.print(i++);
      show(i);
    }
    System.out.print(i--);
  }

}

2 个答案:

答案 0 :(得分:1)

您可以将输出分为两部分: 第一部分:

012345678910

这部分是从你的if语句中打印出来的 - 它将从0到10递归运行,因为对于那些我是&lt; = 9。

第二部分:

10987654321

这个来自System.out.print(i--);之后你的if语句 - 在第一部分中你递归到你的show方法,现在你正在递归它,从10到1(你不会得到0因为你的++)

如果您希望最后一行仅执行一次,请在else段中执行此操作,这样您就无法在输入show method

的所有时间内获取该行

答案 1 :(得分:1)

以图形方式,这种情况发生:

if (i <= 9) {
    System.out.print(i++);
    if (i <= 9) {
        System.out.print(i++);
        if (i <= 9) {
            System.out.print(i++);
            // etc, until i == 10
            System.out.print(i--);
        }
        System.out.print(i--);
    }
    System.out.print(i--);
}
System.out.print(i--);

最后一行总是再次执行;想象一下,如果我从20开始 - 这个嵌套的被叫不会执行,但最后一行将执行一次。