Java递归方法的打印执行逻辑及输出结果原理咨询
递归打印逻辑执行流程解析
你提供的Java代码如下:
public static void wackyOutput(String wacky){ if(wacky.length() < 2){ return; } wacky = wacky.substring(1, wacky.length()); wackyOutput(wacky); System.out.print(wacky); }
核心逻辑说明
出现该结果的核心原因是:每一层递归调用返回后,都会执行当前层剩余的打印语句,而非仅最内层递归执行打印。递归调用遵循栈的「先进后出」规则,先触发的调用会后执行完毕,因此打印操作会从最内层递归往外层依次执行,最终输出反向拼接的截取结果。
逐调用层执行流程拆解
执行wackyOutput("ABCD")时完整流程如下:
- 第1层调用:入参为
"ABCD",长度≥2,截取后当前层wacky值为"BCD",先触发wackyOutput("BCD"),打印语句进入等待状态 - 第2层调用:入参为
"BCD",长度≥2,截取后当前层wacky值为"CD",先触发wackyOutput("CD"),打印语句进入等待状态 - 第3层调用:入参为
"CD",长度≥2,截取后当前层wacky值为"D",先触发wackyOutput("D"),打印语句进入等待状态 - 第4层调用:入参为
"D",长度<2,直接return返回至第3层 - 第3层恢复执行:打印当前层wacky值
"D",执行完毕返回至第2层 - 第2层恢复执行:打印当前层wacky值
"CD",执行完毕返回至第1层 - 第1层恢复执行:打印当前层wacky值
"BCD",方法执行结束
三次打印结果拼接为"D"+"CD"+"BCD",即最终输出的"DCDBCD"。
内容的提问来源于stack exchange,提问作者merve şentürk
相关产品推荐
相关产品推荐

