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

如何用递归在C语言中反转八进制数字顺序?十进制转八进制求助

递归实现十进制转八进制(1-100)并修正顺序问题

你的代码目前存在两个核心问题:一是循环中计算的余数没有输出,导致转换结果不完整;二是没利用递归的栈特性控制输出顺序,才会出现数字颠倒的情况。

要解决顺序颠倒的问题,关键是先递归处理高位,再打印当前位:递归调用会先深入到最高位的计算,当递归返回时再依次打印每一位,自然就是从高位到低位的正确顺序。

修正后的完整代码

#include <stdio.h>

// 递归函数:将单个十进制数转为八进制并正确输出
void decToOct(int num) {
    if (num == 0) {
        return;
    }
    // 先递归处理商,得到高位
    decToOct(num / 8);
    // 再打印当前余数,即当前位
    printf("%d", num % 8);
}

// 递归遍历1到100,逐个转换输出
void convertRange(int n) {
    if (n > 100) {
        return;
    }
    printf("%d: ", n);
    decToOct(n);
    printf("\n");
    convertRange(n + 1);
}

int main() {
    convertRange(1);
    return 0;
}

代码说明

  1. decToOct函数:专门负责单个数字的递归转换。以十进制92为例:

    • 第一次调用decToOct(92),先执行decToOct(11)(92÷8=11)
    • 调用decToOct(11),先执行decToOct(1)(11÷8=1)
    • 调用decToOct(1),先执行decToOct(0),触发终止条件返回
    • 回到decToOct(1),打印1%8=1
    • 回到decToOct(11),打印11%8=3
    • 回到decToOct(92),打印92%8=4
    • 最终输出134,完全符合八进制的正确顺序。
  2. convertRange函数:用递归遍历1到100,逐个调用转换函数并格式化输出,保留你原本的遍历逻辑。

  3. 原代码中math.h头文件无实际作用,直接移除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:35:32