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

十进制转二进制递归函数输出结果反转问题求助

解决递归十进制转二进制输出反转的问题

嘿,我一眼就看出问题出在哪啦!你的递归逻辑顺序搞反了,导致余数的填充方向和二进制位的顺序不匹配,咱们一步步来解决~

问题根源分析

你现在的代码是先计算当前数的余数(这是二进制的最低位),再递归处理商,而且把余数放到了数组的左侧(从array.length - bits的位置开始)。比如输入28时,第一次得到的余数是0(28%2),被放到了数组的最左边,最后递归到高位时的余数1被放到了数组的右侧,自然整个结果就反转了。

举个小例子:28的二进制是11100,你的代码会把余数的顺序(0,0,1,1,1)从左到右填充,加上补的0就变成了0011100000,完全反过来啦!

修复方案:调整递归与填充的顺序

正确的思路应该是先递归处理商(也就是更高位的二进制),再填充当前的余数,同时从数组的**右侧(末尾)**开始往左填充,这样高位的余数会先被放到数组的左边区域,低位的余数放到右边,正好符合二进制的顺序。

修改后的代码如下:

public void binary(int n, char[] array, int index) {
    if (0 == n) {
        // 递归到n=0时,把剩余的高位全部补0
        while (index >= 0) {
            array[index--] = '0';
        }
        return;
    }
    // 先递归处理商,往数组左侧移动一位(index-1)
    binary(n / 2, array, index - 1);
    // 再把当前余数填充到当前index的位置
    array[index] = (n % 2 == 0) ? '0' : '1';
}

调用方式

比如你需要10位的二进制结果,这样调用:

char[] result = new char[10];
binary(28, result, 9); // 初始index设为数组最后一位的索引(9)
System.out.println(new String(result)); // 输出:0000011100

为什么这样能行?

咱们走一遍28的递归流程:

  1. 从binary(28, result,9)开始,先递归调用binary(14, result,8),直到binary(0, result,4)
  2. 当n=0时,把index4到0的位置全部补0,得到数组前5位是00000
  3. 然后回溯递归:
    • 回到binary(1, result,5),把1%2=1放到index5 → 数组第6位是1
    • 回到binary(3, result,6),把3%2=1放到index6 → 数组第7位是1
    • 回到binary(7, result,7),把7%2=1放到index7 → 数组第8位是1
    • 回到binary(14, result,8),把14%2=0放到index8 → 数组第9位是0
    • 回到binary(28, result,9),把28%2=0放到index9 → 数组第10位是0
      最终数组就是0000011100,完全正确!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:54:41