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

Java递归练习疑问:传入参数5为何输出7个星号?

搞懂递归调用中星号数量的问题

嘿,递归这玩意儿刚开始确实容易绕晕——我当初学的时候也对着类似的问题卡了好一会儿!不过现在得麻烦你把输出星号的递归代码贴出来呀😉,不过没关系,我先拿一个最典型的会出现传入i=5输出7个星号的递归场景来拆解,你可以对照自己的代码看是不是同一个路数。

假设你的代码是类似这样的:

def print_stars(i):
    if i <= 0:
        return
    # 先递归调用左分支
    print_stars(i - 2)
    # 打印当前层的星号
    print("*", end="")
    # 再递归调用右分支
    print_stars(i - 2)

我们一步步掰扯print_stars(5)的执行流程,你就能看明白为啥是7个星号了:

  • 第一步:调用print_stars(5),i=5>0,先跑第一个print_stars(3)
  • 第二步:调用print_stars(3),i=3>0,先跑第一个print_stars(1)
  • 第三步:调用print_stars(1),i=1>0,先跑第一个print_stars(-1)——i<=0,直接返回,啥也不做
  • 回到print_stars(1):打印1个*,然后跑第二个print_stars(-1),同样直接返回
  • 回到print_stars(3):打印1个*,然后跑第二个print_stars(1)
  • 执行print_stars(1):重复第三步到第四步,又打印1个*
  • 回到print_stars(5):打印1个*,然后跑第二个print_stars(3)
  • 执行print_stars(3):重复第二步到第六步,又打印2个*

现在把所有打印的星号加起来:1+1+1+1+2=7,刚好对上!

本质是这个递归函数的结构是左右双递归+中间打印,每一层的星号总数是左递归输出的数量 + 1(当前层) + 右递归输出的数量。用公式算的话:

  • f(1) = 0(左) +1 +0(右)=1
  • f(3)=f(1)+1+f(1)=1+1+1=3
  • f(5)=f(3)+1+f(3)=3+1+3=7

如果你的代码不是这个逻辑,把代码贴出来,我再帮你精准分析!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:26:13