以下是使用递归函数实现的C语言程序,用于打印菱形图案。程序通过两个递归函数分别处理菱形的上半部分和下半部分,避免了循环结构:
c
#include <stdio.h>
// 递归打印空格
void print_spaces(int n) {
if (n <= 0) return;
printf(" ");
print_spaces(n - 1);
}
// 递归打印星号
void print_stars(int n) {
if (n <= 0) return;
printf("*");
print_stars(n - 1);
}
// 递归打印上半部分(含中间行)
void print_upper(int current, int total) {
if (current >= total) return;
print_spaces(total - 1 - current); // 打印前导空格
print_stars(2 * current + 1); // 打印星号
printf("\n");
print_upper(current + 1, total); // 递归处理下一行
}
// 递归打印下半部分
void print_lower(int current, int total) {
if (current >= total - 1) return;
print_spaces(current + 1); // 打印前导空格
print_stars(2 * (total - 1 - current) - 1); // 打印星号
printf("\n");
print_lower(current + 1, total); // 递归处理下一行
}
int main() {
int line = 0;
scanf("%d", &line); // 输入行数
print_upper(0, line); // 打印上半部分(含中间行)
print_lower(0, line); // 打印下半部分
return 0;
}
程序说明:
-
递归函数设计:
print_spaces(int n):递归打印n个空格print_stars(int n):递归打印n个星号print_upper(int current, int total):递归打印菱形上半部分(含中间行)print_lower(int current, int total):递归打印菱形下半部分
-
执行流程:
- 用户输入行数
line(如7) print_upper(0, line)从第0行开始递归,打印:- 空格数 = line-1-i
- 星号数 = 2i+1
print_lower(0, line)从第0行开始递归,打印:- 空格数 = i+1
- 星号数 = 2(line-1-i)-1
- 用户输入行数
-
示例输出(输入7):
* *** ***** *******
******* ***** *** *

此实现完全遵循递归范式,通过函数调用栈替代循环控制,符合题目要求。