递归调用后的语句

时间:2014-11-29 02:05:25

标签: recursion

帮助我理解这个程序的输出:

 int n;
 void rec() {
        n = n + 1;
        if (n < 3) {
            rec();
            System.out.println(n);  // (*)
        }
    }

输出是&#34; 3 3&#34;。为什么行(*)甚至被执行?

1 个答案:

答案 0 :(得分:1)

假设n在开始时初始化为0:

  1. 第一次调用函数n增加到1。因此,rec()被称为第二次。

  2. 第二次通过n增加到2. 2&lt;因此,rec()被称为第三次。

  3. 现在第三次通过n增加到3. 3不小于3,因此if语句不会执行。所以现在你退出当前的函数调用(第三次)并返回上一次调用,这是第二次调用。

  4. 现在第二次通话中rec()的通话已完成,系统会调用System.out.println并显示n(3)的值。现在第二个呼叫结束,所以你退出当前的功能调用(第二次)并返回上一个呼叫,这是第一个呼叫。

  5. 现在您已经完成了该功能的第一次调用,并且由于对rec()的调用已经完成,您再次致电System.out.println,再次显示值{{1} }。