转载

java – 递归输出歧义

好的,我只是在学习递归,我对一点感到困惑.

这是代码

public class RecursiveDemo {
  public static void showRecursion (int num) {
   System.out.println("Entering method. num = " + num);
    if (num > 1) {
      showRecursion(num - 1);
    }
    System.out.println("Leaving method. num = " + num);
  }

  public static void main(String[] args){
    showRecursion(2);
  }
}

我得到的输出是:

Entering method. num = 2
Entering method. num = 1
Leaving method. num = 1
Leaving method. num = 2

我的问题是为什么我得到输出“离开方法.num = 2”.不应该停在“离开方法.num = 1”,因为num已经达到1?

一旦该方法的原始调用离开if语句,它就会传递给System.out.println(“Leaving method.num =”num);.由于您最初使用值2调用了消息,因此对于此部分代码,2是num的值.

你的代码像这样运行(伪代码):

Start First Call
    if statement
       Start Second call
           Skips if statement
           Print from Second Call
       End of Second Call
    End of if Statement
    Print From First Call
End of First Call

看起来你对递归有一个根本的误解.

当您使用(num-1)作为参数调用方法时,父调用(在本例中为第一次调用)将值num保留为其参数,在本例中为2.

翻译自:https://stackoverflow.com/questions/6867941/recursion-output-ambiguity

原文  https://codeday.me/bug/20190113/515037.html
正文到此结束
Loading...