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

如何用递归方法统计整数二进制表示中1的个数

实现方案

核心逻辑说明

递归实现只需要抓住两个核心规则:

  • 终止条件:当入参X == 0时,二进制中没有1,直接返回0即可,你原来的终止条件仅覆盖了X=0的判断,逻辑冗余且不全
  • 递推公式:当前位的1的计数为X % 2(结果为0或1,对应当前最低位是否为1),剩余高位的1的计数可以递归调用binaryOnes(X / 2)获得,最终返回两者的和即可

完整实现代码

public static int binaryOnes(int X) {
    // 递归终止条件
    if (X == 0) {
        return 0;
    }
    // 当前位计数 + 高位部分递归计数
    return X % 2 + binaryOnes(X / 2);
}

扩展优化(支持负数统计)

如果需要兼容负数的1的统计,可以将算术运算替换为位运算,避免符号位影响计算结果:

public static int binaryOnes(int X) {
    if (X == 0) {
        return 0;
    }
    // X&1等价于X%2取最低位,X>>>1是无符号右移等价于非负数的X/2
    return (X & 1) + binaryOnes(X >>> 1);
}

测试代码问题修正

你之前写的错误测试代码存在两个问题:

  • 方法返回值声明错误,binaryOnes返回int类型,不能声明为void
  • 语法错误,调用语句末尾应该是分号不是句号

你提供的驱动测试代码可以直接和上述实现配合运行,测试0-9的所有用例都会返回Correct。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:09:04