2014-05-19 34 views

回答

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 
+0

可悲的是它仍然2. – user3578012

+0

什麼還是2? –

+0

如果c = 10,zaehler必須是4;因爲我們需要4 BinaryLetter – user3578012

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