You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java递归打印星号时printStarNTimes执行逻辑相关疑问

递归打印星号逻辑原理解析

核心逻辑:递归的两个执行阶段

输出的规律本质是递归分为递推向下和回溯向上两个阶段,两处printStarNTimes分别在两个阶段执行:

public static void printStars(int count){
    if (count == 0){
        return;
    }
    // 递推阶段执行:调用下一层递归前运行
    printStarNTimes(count);
    printStars(count-1);
    // 回溯阶段执行:下一层递归返回后运行
    printStarNTimes(count);
}

private static void printStarNTimes(int n) {
    for (int i = 0; i < n; i++) {
        System.out.print("*");
    }
    System.out.println();
}

每个递归方法调用都会在JVM虚拟机栈中创建独立的栈帧,存储当前方法的参数、局部变量等信息,所以每层的count值都是独立的,不会互相影响。

1. 递推阶段(前半部分倒序打印)

调用printStars(5)后,会先执行第一个printStarNTimes,再递归调用参数减1的printStars,直到count为0停止:

  • 第一层count=5:打印*****,调用printStars(4)
  • 第二层count=4:打印****,调用printStars(3)
  • 第三层count=3:打印***,调用printStars(2)
  • 第四层count=2:打印**,调用printStars(1)
  • 第五层count=1:打印*,调用printStars(0)
  • 第六层count=0:直接返回,递推阶段结束
    这部分输出对应结果的前5行倒序星号。

2. 回溯阶段(后半部分正序打印)

当printStars(0)返回后,会从最内层的递归调用依次往外返回,执行每一层递归里printStars(count-1)之后的代码,也就是第二个printStarNTimes:

  • 回到第五层count=1:执行第二个printStarNTimes(1),打印*,返回上一层
  • 回到第四层count=2:执行第二个printStarNTimes(2),打印**,返回上一层
  • 回到第三层count=3:执行第二个printStarNTimes(3),打印***,返回上一层
  • 回到第二层count=4:执行第二个printStarNTimes(4),打印****,返回上一层
  • 回到第一层count=5:执行第二个printStarNTimes(5),打印*****,所有调用结束
    这部分输出对应结果的后5行正序星号,并非count真的递增,是回溯时按从内到外的顺序执行栈帧,每层的count值自然从1逐步增加到5。

内容的提问来源于stack exchange,提问作者sadik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:09:01