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

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





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

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

相关推荐
三品吉他手会点灯11 小时前
C语言学习笔记 - 35.数据类型 - printf函数的非输出控制符与格式优化
c语言·开发语言·笔记·学习
Ghost Face...11 小时前
U-Boot SPL阶段与主阶段深度解析:从ROM到Kernel的完整引导之旅(ARMv8)
c语言
三品吉他手会点灯12 小时前
C语言学习笔记 - 33.数据类型 - printf函数的详细用法
c语言·开发语言·笔记·学习·算法
t-think14 小时前
深入理解指针(2)
c语言·开发语言
我不是懒洋洋14 小时前
从零开始实现一个简单的神经网络:C语言版
c语言
百万老师15 小时前
自然语言编程时代,如何零基础学习掌握嵌入式编程
c语言·单片机·嵌入式硬件·学习·ai全流程闭环开发
淞綰16 小时前
c语言的练习-字符串的练习-寻找最长连续字符以及出现次数
c语言·数据结构·学习·算法·c语言的练习
三品吉他手会点灯18 小时前
C语言学习笔记 - 36.数据类型 - 为什么需要输出控制符
c语言·开发语言·笔记·学习
阳光九叶草LXGZXJ19 小时前
自制数据库迁移工具-C版-07-HappySunshineV1.6-(支持PG、达梦、Gbase8a)
linux·c语言·开发语言·数据库·学习·postgresql
星恒随风19 小时前
从0开始的操作系统学习之路(2)
c语言·笔记·学习