递归实现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):

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





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

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

相关推荐
铅笔小新z6 小时前
【C语言】深入理解指针
c语言·开发语言
Aurorar0rua12 小时前
CS50 x 2024 Notes Data structures - 08
c语言·开发语言·学习方法
小米里的大麦13 小时前
19 C、C++ 操作 MySQL
c语言·c++·mysql
Logic10113 小时前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
番茄灭世神13 小时前
PN学堂GD32教程第12篇——SPI与Nor Flash
c语言·stm32·单片机·嵌入式·gd32·总线协议
苏辰澈14 小时前
C++独属于自己的变身:多态
c语言·开发语言·c++·visualstudio·编辑器
水饺编程14 小时前
第1章,[Win32 章节]:在 VS2019 里面安装 MSDN
c语言·c++·windows·visual studio
水饺编程15 小时前
第1章,[Win32 章节]:编程环境与 MSDN
c语言·c++·windows·visual studio
wuminyu1 天前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Logic1011 天前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法