当前位置: 首页 > 编程笔记 >

java中实现递归计算二进制表示中1的个数

伯洋
2023-03-14
本文向大家介绍java中实现递归计算二进制表示中1的个数,包括了java中实现递归计算二进制表示中1的个数的使用技巧和注意事项,需要的朋友参考一下

借助Java语言,运用递归算法计算整数N的二进制表示中1的个数

/*use the recursive algorithme to calculate 
 * the number of "1" in the binary expression
 * of an Integer N.
 * Note:if N is an odd, then
 * the result is the result of N/2 plus 1.
 * And the program use the bit operation to
 * improve efficency ,though it's seemingly
 * not necessary ,but the idea I think is good.
 * The program is writed by Zewang Zhang ,at
 * 2015-5-4,in SYSU dorms.
 */
 
public class CalculateNumberInBinaryExpression {
  //Main method.
  public static void main(String[] args) {
     
    //For example ,make N equals 13 ,the result shows 3
    System.out.println(numOfEven(13));
     
    //For example ,make N equals 128 ,the result shows 1
    System.out.println(numOfEven(128));
  }
   
  //The static method of numOfEven is the recursive method.
  public static int numOfEven(int x) {
     
    //The base of recursive.
    if(x==0) {
      return 0;
    }
     
    //If x is an odd.
    else if(x%2!=0) {
      return numOfEven(x>>1)+1;
    }
     
    //If x is an even except 0.
    else {
      while(x%2==0) {
        x=(x>>1);
      }
      return numOfEven(x);
    }
  }
}

来个最简单的,不过未测试:)

public int a(int i){
    if(i==0||i==1) return i;
    return i%2+a(i/2);

}

以上所述就是本文的全部内容了,希望大家能够喜欢。

 类似资料:
  • 我正在尝试使用递归在python中实现二进制搜索树。我被困在程序中发生的一些无限递归中。我通过传递地址和数据对函数RecursBST进行递归调用,直到顶部遍历到它的左或右子级的None值为止。 我运行到以下错误:

  • 338. Counting Bits [M] 题目 Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.

  • NowCoder 题目描述 输入一个整数,输出该数二进制表示中 1 的个数。 n&(n-1) 该位运算去除 n 的位级表示中最低的那一位。 // n : 10110100 n-1 : 10110011 n&(n-1) : 10110000 时间复杂度:O(M),其中 M 表示 1 的个数。 // java public int NumberOf1(int n) {

  • 问题内容: 请帮我了解负整数的二进制表示形式。 例如,我们有5。5的二进制表示是。 而且据我了解,-5的二进制表示应该像。 但是输出是。 我有2个问题: 1)为什么这里有这么多位。 2)我真正无法理解的是最后3位。看起来像。即使是+1或-1这将是或 谢谢 问题答案: 您对这些负数应该是什么样的理解是有缺陷的。Java对负数使用二进制补码,而基本规则是取正数,将所有位取反然后加1。那给你带来负面影响

  • 本文向大家介绍C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法,包括了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法。分享给大家供大家参考,具体如下: 希望本文所述对大家C++程序设计有所帮助。

  • 一、题目 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制1001,有2位1。因此如果输入9,该函数输出2。 二、解题思路 ①位移+计数 每次右移一位,不断和1进行与运算,直到位0。 ②循环让(n - 1) & n。如果n的二进制表示中有k个1,那么这个方法只需要循环k次即可。其原理是不断清除n的二进制表示中最右边的1,同时累加计数器,直至n为0。因为从二进制的角度