帮助我理解这个程序的输出:
int n;
void rec() {
n = n + 1;
if (n < 3) {
rec();
System.out.println(n); // (*)
}
}
输出是&#34; 3 3&#34;。为什么行(*)甚至被执行?
答案 0 :(得分:1)
假设n
在开始时初始化为0:
第一次调用函数n
增加到1。因此,rec()
被称为第二次。
第二次通过n
增加到2. 2&lt;因此,rec()
被称为第三次。
现在第三次通过n
增加到3. 3不小于3,因此if
语句不会执行。所以现在你退出当前的函数调用(第三次)并返回上一次调用,这是第二次调用。
现在第二次通话中rec()
的通话已完成,系统会调用System.out.println
并显示n
(3)的值。现在第二个呼叫结束,所以你退出当前的功能调用(第二次)并返回上一个呼叫,这是第一个呼叫。
现在您已经完成了该功能的第一次调用,并且由于对rec()
的调用已经完成,您再次致电System.out.println
,再次显示值{{1} }。