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
相关产品推荐
相关产品推荐

