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

C语言递归draw函数输出顺序不符预期的原因咨询

递归调用顺序导致输出与预期相反的原因

你的代码输出和预期相反,核心问题在于递归调用的执行顺序:

你当前的代码中,draw(x-1)是在打印星号的语句之前执行的。这会让程序先逐层深入递归,直到触发终止条件(x=0),然后才从最底层的递归调用开始向上执行打印操作。

具体执行流程拆解

当调用draw(4)时,程序的执行步骤是:

  • 进入draw(4),满足x>0,先调用draw(3)
  • 进入draw(3),满足x>0,先调用draw(2)
  • 进入draw(2),满足x>0,先调用draw(1)
  • 进入draw(1),满足x>0,先调用draw(0)
  • draw(0)不满足x>0,直接返回
  • 回到draw(1),执行打印:输出1个*并换行
  • 回到draw(2),执行打印:输出2个*并换行
  • 回到draw(3),执行打印:输出3个*并换行
  • 回到draw(4),执行打印:输出4个*并换行

这就是为什么你看到的输出是从小到大的星号序列。

修正方法

如果你想得到从多到少的输出,只需要把递归调用移到打印语句之后,这样程序会先打印当前x对应的星号,再递归处理更小的x值:

#include <stdio.h>

void draw(int x) 
{
  if (x > 0) 
  {
    for (int i = 0; i < x; i++) 
    {
      printf("*");
    }
    printf("\n");
    draw(x-1); // 递归调用移至打印操作之后
  }
}

int main (void) 
{
   draw(4);
}

运行修正后的代码,就能得到你预期的输出:

****
***
**
*

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:31:08