递归实现C语言菱形图案打印

以下是使用递归函数实现的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;
}

程序说明:

  1. 递归函数设计:

    • print_spaces(int n):递归打印 n 个空格
    • print_stars(int n):递归打印 n 个星号
    • print_upper(int current, int total):递归打印菱形上半部分(含中间行)
    • print_lower(int current, int total):递归打印菱形下半部分
  2. 执行流程:

    • 用户输入行数 line(如7)
    • print_upper(0, line) 从第0行开始递归,打印:
      • 空格数 = line-1-i
      • 星号数 = 2i+1
    • print_lower(0, line) 从第0行开始递归,打印:
      • 空格数 = i+1
      • 星号数 = 2(line-1-i)-1
  3. 示例输出(输入7):

    复制代码
       *
      ***
     *****
    *******





    复制代码
    *******
     *****
      ***
       *

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

相关推荐
·present·6 小时前
CSAPP(Bomb lab)
c语言·c++
wuminyu10 小时前
Java字节码学习总结:字节码如何加载、解析和执行
java·linux·c语言·jvm·c++
图灵-M14 小时前
【数据结构】静态 & 动态顺序表
c语言·数据结构·笔记
揽星河..14 小时前
【C语言】数组
c语言·开发语言·算法
水饺编程14 小时前
第2章:Linux 基础,制作【.tar.xz】压缩包文件
linux·c语言·汇编
揽星河..15 小时前
【C语言】函数
c语言·算法
Navigator_Z18 小时前
LeetCode //C - 1311. Get Watched Videos by Your Friends
c语言·算法·leetcode
可乐_不渴19 小时前
# C语言文件操作全解析:从 fopen 到 fclose,一文吃透文件 IO
linux·服务器·c语言
Zwawa1 天前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
揽星河..1 天前
【C语言】分支和循环
c语言·c++·算法