-1
喂:)我想算二進制數,用這種方法遞歸數來表示數字所需的位數
private static int helper (int c,int zaehler){
if (c>>1 == 1){
return zaehler + 2;
}else{
return helper(c>>1,zaehler++);
}
喂:)我想算二進制數,用這種方法遞歸數來表示數字所需的位數
private static int helper (int c,int zaehler){
if (c>>1 == 1){
return zaehler + 2;
}else{
return helper(c>>1,zaehler++);
}
所以,你要算遞歸(表示一個數字所需的位數即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
鑑於澄清你想要什麼,你給@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
可悲的是它仍然2. – user3578012
什麼還是2? –
如果c = 10,zaehler必須是4;因爲我們需要4 BinaryLetter – user3578012