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; }
修复说明
- 拆分递归职责:
printStars负责单行的*打印,triangle负责控制行数顺序,先打印上一行再输出当前行,保证从第1行到目标行的顺序输出。 - 修正终止条件:当
rows == 0时停止递归,避免原代码倒置的判断逻辑。 - 添加换行处理:每行
*打印完成后输出\n,形成三角形的行结构。 - 符合要求:全程未使用循环或乘法,完全通过递归实现需求。
内容的提问来源于stack exchange,提问作者Leyla
相关产品推荐
相关产品推荐

