Java递归

Java递归,java,Java,以下是我对AP计算机科学问题的改编。 这本书说它应该印刷00123 我认为应该打印0012 但下面的代码实际上打印的是3132123 发生了什么事? 而且它似乎没有任何停止条件 public class Mystery { public static void main(String[] args) { int n; n = 3; mystery(n); } public static void mystery(int

以下是我对AP计算机科学问题的改编。 这本书说它应该印刷00123 我认为应该打印0012 但下面的代码实际上打印的是3132123

发生了什么事? 而且它似乎没有任何停止条件

public class Mystery {

    public static void main(String[] args) {
        int n;
        n = 3;
        mystery(n);
    }

    public static void mystery(int n) {
        int k;
        for (k = 0; k < n; k++) {
            mystery(k);
            System.out.print(n);
        }
    }
}
实际问题是: 考虑下面的方法。

public void mystery (int n)
{
     int k;
     for (k=0 ; k < n ; k++)
     {
          mystery(k);
          System.out.print(n);
     }
}
调用神秘3返回什么值

我现在明白了循环构成了停止条件,我想我明白了贾蒙的注释最后一条指令是打印n。n是3,它不可能只打印“0010012”,但我不明白为什么书上说它应该打印00100123


正如Batsheba所说,我试着在调试时观察变量,但书上说应该打印00123。非常感谢贾蒙更正了代码,所以从我看来这本书是错的?

该程序无法打印0。它打印n,如果n为0,它将永远不会到达System.out.printn行。该行位于for语句内,klast指令用于打印n。nis 3,它不可能只打印“0010012”,而且它似乎没有任何停止条件?!它有一个:提示:印刷品不在正确的位置,试着把它移出回路,把印刷品放在lop之外,你就会得到书上给出的结果。这是你的ideone@jhamon的叉子好发现!顺便说一句,你应该编辑评论。有一个地方应该有一个链接被断开。