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

C语言递归打印三角形作业求助:代码错误排查

C语言递归打印三角形代码的错误修正

你的代码里存在几处关键问题,导致无法实现递归打印三角形的功能,具体修正点如下:

  • return语句阻断执行流程:tri函数中,else分支的return语句直接返回,后面的打印循环代码永远不会被执行,递归的核心打印逻辑完全没机会运行。
  • 递归调用完全错误:return (x - 1, org);是逗号表达式,只会返回org的值,根本没有调用tri函数,递归链条直接断裂。正确的做法是完成当前行打印后,递归调用tri(x-1, org)。
  • 前置空格打印无效:printf("");不会输出任何字符,要实现三角形的缩进效果,应该改成printf(" ");来打印空格。
  • 换行符写法非法:C语言中换行符必须用\n,printf(" ");是错误写法,要改成printf("\n");。
  • 函数返回值类型冗余:dreick和tri的作用是打印内容,不需要返回int类型,改成void更合理,main函数里也不需要接收返回值,直接调用即可。

修改后的完整代码:

#include <stdio.h>

void tri(int x, int org);
void dreick(int x) {
    tri(x, x);
}

void tri(int x, int org) {
    if (x == 0) {
        return;
    }
    // 先递归打印上一行,实现正三角形的从上到下输出
    tri(x - 1, org);
    
    // 打印当前行的前置空格
    for (int i = 0; i < (org - x); i++) {
        printf(" ");
    }
    // 打印当前行的星号
    for (int j = 0; j <= x; j++) {
        printf("*");
    }
    printf("\n");
}

int main() {
    dreick(5);
    return 0;
}

这段代码运行后会输出一个正三角形:

*
    **
   ***
  ****
 *****
******

如果需要倒三角形,只需要把递归调用和打印代码的顺序调换,先打印当前行再递归调用tri(x-1, org)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:40:41