Java递归实现十进制转2-16进制输出顺序错误问题求助
问题根因
- 输出顺序颠倒:进制转换取余操作得到的是从低位到高位的结果,当前递归逻辑先打印当前位余数再递归处理商,会直接输出逆序的结果,这就是256转8进制输出不符合预期的核心原因。
- 缺少16进制字符映射:基数大于10时,余数1015需要对应输出AF,直接打印数字会得到不符合规范的结果。
修复方案
调整递归的执行顺序,先递归处理商输出高位,再打印当前位的余数,同时添加16进制字符映射逻辑,修复后的递归函数代码如下:
public static void recursionFunction(int Decimal, int Base){ char[] digitMap = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; if (Decimal == 0) { return; } // 先递归处理商,优先输出高位 recursionFunction(Decimal / Base, Base); // 输出当前位对应的字符 System.out.print(digitMap[Decimal % Base]); }
如果需要兼容输入为0的场景,可以在main方法调用递归函数前添加判断:
if (DValue == 0) { System.out.print(0); } else { recursionFunction(DValue, TBase); }
修复后测试十进制256转八进制,会得到正确结果400。
内容的提问来源于stack exchange,提问作者Rafael Nathan Ang
相关产品推荐
相关产品推荐

