我不明白为什么它会打印总的二进制位而不是Java和C ++中的最后一位。我在C中检查了它,因为我认为它只显示最后一位。但是,在C ++和Java中,它会打印所有位。
public static void main(String[] args) {
toBin(2);
}// end of main
static void toBin(int b) {
int modu = 0;
if (b < 1) {
return;
}
modu = b % 2;
b=(b>>1);
toBin(b);
System.out.print(modu);
}// end of toBin()
最佳答案
toBin()的工作方式是先除以2
modu = b % 2;
将其添加到开头,然后除以2
b = b >> 1
并递归重复,直到没有剩余。
if (b < 1) {
return
}
如果您以小数来考虑的话,它会容易一些。
假设您有数字4863,并想以10为底数打印出来。
首先,取n%10(即3),然后除以10,得到486。重复,得到6和48,依此类推。
打印在toBin(b)之后的原因是,因此不需要维护字符串。相反,它将首先打印最内部的递归调用,并且在退出时,将反向打印其余的调用。
本质上,以下内容(可能更容易理解)执行相同的操作,但将数字向后打印:
while (b >= 1) {
System.out.print(b % 2);
b /= 2;
}