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

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





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

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

相关推荐
深念Y11 分钟前
开发者如何清理和迁移C盘堆积的垃圾
c语言·开发语言
十月的皮皮1 小时前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
天空'之城2 小时前
C 语言工业级通用组件手写 10:字节序转换
c语言·字节序·大小端·嵌入式通信·工业级组件
我叫洋洋13 小时前
C ++ [ hello world ]
c语言·c++·算法
天空'之城14 小时前
C 语言工业级通用组件手写 09:CRC32 数据校验
c语言·嵌入式开发·数据校验·crc32·工业级组件
Scott9999HH17 小时前
告别流量波动玄学!从法拉第电磁定律到底层 C/C++ 流量累积算法,深度解密工业级电磁流量计选型与开发
c语言·c++·算法
天空'之城18 小时前
C 语言工业级通用组件手写 06:固定块内存池
c语言·嵌入式开发·内存池·底层优化
十月的皮皮19 小时前
stm20260720-从新手 C 到量产 STM32 工程:程序设计推导指南
c语言·开发语言·stm32·stm32cubemx·hal库
Echo缘20 小时前
嵌入式系统C语言资源分类与内存分布分析
c语言·开发语言
chexus1 天前
20. 深入 Nginx 信号处理
linux·c语言·网络·nginx