有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

递归Java编程

我一直在试图弄清楚为什么输出是321而不是123。我已经试了很多次,看了一遍讲课幻灯片,但我仍然找不到这个问题的答案

public static void main(String[] args) {
     printNumber(1);
}

public static void printNumber(int n) {
    if(n!=4) {
         printNumber(n + 1);
         System.out.print(n);
    }
}

共 (3) 个答案

  1. # 1 楼答案

    每次对printNumber的调用都会首先调用printNumber(n+1),然后打印出一些内容。所以printNumber(n+1)printNumber(n)打印出它的数字之前已经完成了

    main():
       printNumber(1):
           printNumber(2):
               printNumber(3):
                   printNumber(4) // does nothing
                   print(n) // "3"
                   // printNumber(3) completes, returning control to printNumber(2)
               print(n) // "2"
               // printNumber(2) completes, returning control to printNumber(1)
           print(n) // "1"
           // printNumber(1) completes, returning control to main()
       // main() completes
    
  2. # 2 楼答案

    产生这个结果的原因是您放置了递归调用语句printNumber(n + 1) 在print语句System.out.print(n)之前,它将不断递归调用它,直到它到达4。之后,它将打印从上次调用n+1n的数字,就像我们的示例中从31

    试试这个:

    public static void printNumber(int n) {
        if(n!=4) {
             System.out.print(n);
             printNumber(n + 1);
        }
    }
    

    您将发现输出:123

    原因是在每次递归调用时,它都会打印数字n,然后再调用一次n+1,直到它到达4

  3. # 3 楼答案

    变量n是12或3

    你先打印什么,n还是n + 1?您先打印n + 1,然后再打印n。所以数字的顺序必须相反