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

C语言无循环无乘法的递归打印三角形问题排查与解决

代码逻辑问题分析
  • 条件判断完全倒置:代码第一个分支if(rows >= 0)直接返回0,当传入正整数(比如5)时会直接触发这个分支退出函数,完全跳过后续打印逻辑,这是程序无输出的核心原因。
  • 无换行处理:没有在每行打印完成后输出换行符,即便修复判断逻辑,所有*也会挤在同一行,无法形成三角形的行结构。
  • 递归逻辑未区分行:当前递归仅做*的累加打印,没有实现“每行对应行数数量的*”的分层逻辑。
简易修复方案

我们用两层递归实现:一层控制行数(从第1行到第rows行),另一层打印每行的*,全程不使用循环或乘法:

#include <stdio.h>

// 递归打印一行中的n个*
void printStars(int n) {
    if (n == 0) return;
    printf("*");
    printStars(n - 1);
}

// 递归控制行数,输出三角形
int triangle(int rows) {
    // 递归终止条件:行数为0时停止
    if (rows == 0) return 0;
    // 先递归打印前rows-1行
    triangle(rows - 1);
    // 打印当前行的rows个*
    printStars(rows);
    // 每行结束后换行
    printf("\n");
    return 1;
}

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

修复说明

  1. 拆分递归职责:printStars负责单行的*打印,triangle负责控制行数顺序,先打印上一行再输出当前行,保证从第1行到目标行的顺序输出。
  2. 修正终止条件:当rows == 0时停止递归,避免原代码倒置的判断逻辑。
  3. 添加换行处理:每行*打印完成后输出\n,形成三角形的行结构。
  4. 符合要求:全程未使用循环或乘法,完全通过递归实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:15:38