计算N的二进制表示中的1的数量,即时。在JAVA

时间:2010-09-09 04:33:11

标签: java recursion

我理解N的1的数量与N / 2相同的概念,如果它是偶数,如果数字是奇数则N / 2 + 1,但我不明白如何递归地执行它。 / p>

另外,假设我将10101输入到我的机器中,而我输入N / 2,它确实是505而不是二进制分区。我每次都要来回转换吗?

3 个答案:

答案 0 :(得分:2)

这是一个非作业方式来回答这个问题:Integer.bitCount

: - P

答案 1 :(得分:1)

仔细阅读问题:如果N是偶数,则N中的1的数量与N / 2中的1的数量相同,并且如果N是N,则与(N / 2中的1的数量)+ 1相同奇

如何通过查看位串来判断N是偶数还是奇数? (提示:想想每列代表什么:64,32,16,......)

考虑N / 2在位操作方面的意义:在纸上计算一些,如8 / 2,7 / 2,5 / 2,并寻找模式。

答案 2 :(得分:1)

使用递归时,识别“基本”情况非常重要:不再发生进一步递归的情况。我想如果你在计算比特,那么基本情况就是值为零的地方,也就是说,没有任何比特设置值可以计算。

如果N是偶数,则1的数量在N和N / 2中是相同的,如果N是奇数,则与N / 2 + 1相同。有趣的“位”是“+ 1”。如果N是奇数,那么该位在哪里?考虑一下1,3,9,17,19的位模式......你要检查的任何奇数。你注意到一种模式吗?