Java递归程序中计数器如何从0增长到9?求运行逻辑讲解
Java递归程序输出逻辑解释
首先贴出对应代码:
public class counter { static void myMethod(int counter) { if(counter == 0) { return; } else { System.out.print("Hello " + counter); myMethod(--counter); System.out.print(" " + counter); } } public static void main(String args[]) { myMethod(10); } }
执行逻辑说明
核心规则:内层递归调用没有完全执行结束前,当前方法中位于递归调用之后的代码会暂时挂起,直到内层调用全部返回后才会继续执行。
递归下探阶段(输出Hello 10到Hello 1)
- 首次调用
myMethod(10),counter=10不满足终止条件,先打印Hello 10,执行--counter后counter变为9,调用myMethod(9),该层后续的打印语句暂时挂起,等待myMethod(9)返回。 myMethod(9)执行逻辑与上层一致:打印Hello 9,counter减为8,调用myMethod(8),后续打印语句挂起。- 以上逻辑逐层递归执行,直到调用
myMethod(0)时触发counter==0的终止条件,直接返回无任何输出,下探阶段结束。
递归返回阶段(输出0到9)
下探到终止条件后开始逐层向上返回,执行各层之前挂起的打印语句:
- 首先回到
myMethod(1)的调用点,该层的counter在递归调用前已经被--counter减到了0,执行打印语句输出0,对应你看到的第一个后续输出0。 myMethod(1)执行结束,返回myMethod(2)的调用点,该层的counter在递归调用前已经被减到了1,执行打印输出1,对应后续输出1。- 以此类推,每向上返回一层,当前层存储的counter值就是递归调用前减后的值,依次输出2、3、4直到9。
所有层级执行完毕后,最终输出结果就和你观测到的一致。
内容的提问来源于stack exchange,提问作者Ghostpepper.Wasabi
相关产品推荐
相关产品推荐

