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
相关产品推荐
相关产品推荐

