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

如何用C语言单个递归函数实现打印1到n再返回到1的序列

实现方案

完全可以仅用单个递归函数实现需求,核心利用递归调用「先递后归」的执行特性:进入下层递归前打印当前值实现递增序列,递归返回后再打印当前值实现递减序列即可。

推荐实现(无副作用,线程安全)

// 内部递归函数:max为目标最大值,cur为当前打印的数值
void printHelper(int max, int cur) {
    // 先打印当前数值
    printf("%d", cur);
    // 到达最大值时终止递归,不再往下调用
    if (cur == max) {
        return;
    }
    // 递归打印下一个更大的数
    printHelper(max, cur + 1);
    // 递归返回后,再打印一次当前数值,实现递减序列
    printf("%d", cur);
}

// 对外暴露的单参数调用接口
void printSequence(int n) {
    if (n < 1) {
        return; // 入参合法性校验
    }
    printHelper(n, 1);
}

执行逻辑说明(以n=5为例)

  1. 调用printSequence(5)后进入printHelper(5,1),先打印1,未到最大值,调用printHelper(5,2)
  2. 进入printHelper(5,2),打印2,未到最大值,调用printHelper(5,3)
  3. 进入printHelper(5,3),打印3,未到最大值,调用printHelper(5,4)
  4. 进入printHelper(5,4),打印4,未到最大值,调用printHelper(5,5)
  5. 进入printHelper(5,5),打印5,到达最大值直接返回
  6. 回到printHelper(5,4)的递归调用后逻辑,打印4
  7. 回到printHelper(5,3)的递归调用后逻辑,打印3
  8. 回到printHelper(5,2)的递归调用后逻辑,打印2
  9. 回到printHelper(5,1)的递归调用后逻辑,打印1
    最终输出结果为123454321,完全符合需求。

单参数递归实现(静态变量方案,注意副作用)

如果不想用辅助函数,也可以用静态变量记录当前打印值,但注意静态变量会在函数调用之间保留值,多次调用前需要手动重置:

void printSequence(int n) {
    static int cur = 1;
    printf("%d", cur);
    if (cur == n) {
        cur--;
        return;
    }
    cur++;
    printSequence(n);
    printf("%d", cur);
    cur--;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:00