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

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java – 递归输出歧义

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址