有 Java 编程相关的问题?

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

Java递归性误解

我不理解这段代码,为什么它会算数。如果我用递归调用更改print语句中的顺序,这对我来说是有意义的,但这就是它计数的原因。在by book中,它说“System.out.println发生在每个递归调用返回之前。因此,它是向上计数而不是向下计数。”我不明白。谢谢你的帮助

    public static void countdown(int n)
    {
         if (n == 0) 
         {        
              System.out.println("Blastoff!");    
         } 
         else 
         {
               countdown(n - 1); 
               System.out.println(n);        

         } 
   }

共 (3) 个答案

  1. # 1 楼答案

    您应该将条件“n==0”更改为“n<=0'. 因为若你们传递负值,它就不会停止,你们可能会看到负数

    假设你通过了n=-3。然后它会继续打印-3,-4。。。等等

  2. # 2 楼答案

    那么,如果n!=0,您的程序在“else”块中运行代码,其中是对方法倒计时(n-1)的另一个调用。例如,如果输入n=3,则只要n>;0.因此,基本上运行自己运行的方法,如下所示:

    倒计时(3)调用方法倒计时(2),然后倒计时(2)调用倒计时(1)。只要n大于0,就会发生这种情况。如果n==0,它将打印您的消息

  3. # 3 楼答案

    countdown(n - 1);
    System.out.println(n);
    

    这确实是一个数字

    让我们看看实际发生的事情:每一个^ {CD1>}调用第一个调用本身,甚至在任何写到^ {CD2>}之前。p>

    在下面的示例中,假设我使用2作为参数调用countdown

    1. countdown(2)被调用
    2. 在这个方法调用中,n == 2,所以执行else
    3. countdown(1)被调用
    4. 在这个方法调用中,n == 1,所以执行else
    5. countdown(0)被调用
    6. 在这个方法调用中,n == 0因此if条件为true,所以“Blastoff!”已打印
    7. 此方法退出,返回步骤3所示的方法
    8. ^打印{},其值为1
    9. 方法退出,返回到步骤1所示的方法
    10. n被打印,其值为2
    11. 方法存在

    请注意,每个方法调用都有自己的局部变量,如n。因此,输出为:

    Blastoff!
    1
    2
    

    正如所料。您可以看到,正如书中所说,在将某些内容打印到sysout之前,该方法会调用自身