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

C++递归函数执行逻辑:为何递归调用在前时逐行打印1到h个井号?

C++递归draw函数运行逻辑解释

你产生误解的核心原因是搞错了递归调用的执行规则:函数调用其他函数(包括调用自身)时,会先完整执行完被调用函数的全部逻辑,等被调用函数返回后,才会继续执行当前函数调用位置之后的代码,不会因为提前调用了自身就跳过后续的for循环。
我们可以分两种情况拆解执行流程:

情况1:递归调用在for循环前(即你给出的示例代码)

我们以调用draw(3)为例,完整执行顺序如下:

  • 进入draw(3),h不等于0,优先调用draw(2)
    • 进入draw(2),h不等于0,优先调用draw(1)
      • 进入draw(1),h不等于0,优先调用draw(0)
        • 进入draw(0),触发h==0的终止条件,直接return,无任何输出
      • 回到draw(1),递归调用完成,执行for循环:h=1,打印1个#后换行
    • 回到draw(2),递归调用完成,执行for循环:h=2,打印2个#后换行
  • 回到draw(3),递归调用完成,执行for循环:h=3,打印3个#后换行
    最终输出就是从1个到h个#的正序效果:
#
##
###

情况2:递归调用移到for循环后

修改后的代码逻辑是先执行打印、再发起递归,还是以draw(3)为例:

  • 进入draw(3),h不等于0,先执行for循环:h=3,打印3个#后换行
  • 调用draw(2)
    • 进入draw(2),h不等于0,先执行for循环:h=2,打印2个#后换行
    • 调用draw(1)
      • 进入draw(1),h不等于0,先执行for循环:h=1,打印1个#后换行
      • 调用draw(0),触发终止条件直接return
      • draw(1)执行完毕返回
    • draw(2)执行完毕返回
  • draw(3)执行完毕返回
    最终输出就是从h个到1个#的倒序效果:
###
##
#

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:03