You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何用递归函数实现每次增减2的升降序星号图案打印

代码修改方案

你当前的递归逻辑只在函数向下调用阶段打印星号行,递归回溯阶段没有对应打印操作,因此只有降序部分,补充回溯阶段的打印逻辑即可实现需求。

完整可运行代码

#include <stdio.h>

// 打印n个星号的工具函数
void printpattern(int n){
    if(n==0) return;
    printf("*");
    printpattern(n-1);
}

// 递归打印完整图案的函数
void pattern(int n){
    if(n<=0) return;
    // 降序阶段打印:递归调用前打印当前长度的星号
    printpattern(n);
    putchar('\n');
    // 递归处理下一个更小的长度
    pattern(n-2);
    // 升序阶段打印:递归返回后打印当前长度的星号,跳过最小的2(避免重复打印2行星号)
    if(n > 2) {
        printpattern(n);
        putchar('\n');
    }
}

int main(){
    int n;
    // 用循环替代递归调用main,逻辑更规范
    do {
        puts("number: ");
        scanf("%d", &n);
        if(n%2==1){
            puts("must be even");
        }
    } while(n%2==1);
    pattern(n);
    return 0;
}

核心修改点说明

  • 调整了换行逻辑:删除原来会输出多余空行的puts("\n"),改为打印完星号后输出单个换行符,避免图案出现空行间隔
  • 补充回溯打印逻辑:在pattern(n-2)递归调用结束后,增加对应长度的星号打印代码,递归回溯的过程刚好对应星号长度从小到大的升序阶段
  • 增加打印判断条件:当当前长度为2时,回溯阶段不重复打印,避免出现两行2个星号的错误
  • 优化输入校验逻辑:用do-while循环替代原代码中递归调用main()的写法,避免栈溢出风险,逻辑更规范

内容的提问来源于stack exchange,提问作者user5280387

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:05