递归计算表示数字所需的位数

时间:2014-05-19 19:13:52

标签: recursion binary

你好:)我想用这个方法计算二进制数

   private static  int helper ( int c,int zaehler){


    if (c>>1 == 1){
        return zaehler + 2;


    }else{

        return helper(c>>1,zaehler++);



    }

2 个答案:

答案 0 :(得分:0)

所以你想递归计算表示数字所需的位数(即log2)?

class Foo {
    private static int helper (int c, int zaehler){
        if (c == 0) {
            // Base case, c = 0 so no more bits to count
            return zaehler;
        } else {
            // c >>> 1 is the number without the LSB (assuming Java)
            return helper(c >>> 1, zaehler + 1);
        }
    }

    public static void main(String[] args) {
        System.out.println(helper(Integer.parseInt(args[0]), 1));
    }
}

以下示例显示它有效:

$ java Foo 5   #  5 =   101
3
$ java Foo 15  # 15 =  1111
4
$ java Foo 16  # 16 = 10000
5

答案 1 :(得分:0)

鉴于您对@thatotherguy所要求的内容进行了澄清,您可以在不使用zaehler的情况下实现此目的并使其成为public,而不会让自己面临以下风险:某人将使用第二个参数无效。

class TestNumBits {
   public static int numBits(int c) {
      if (c > 0) {
         return 1 + numBits(c / 2);
      }
      if (c == 0) {
         return 0;
      }
      return numBits(-c);
   }

   public static void main(String[] args) {
      System.out.println(numBits(Integer.parseInt(args[0])));
   }
}

示例输出:

$ java TestNumBits 3
2
$ java TestNumBits 5
3
$ java TestNumBits -5
3
$ java TestNumBits 10
4
$ java TestNumBits 16
5