/**
* <p>
* 递归方法,它的返回数N的二进制表示中1的个数。 利用这样的事实,如果N是奇数,那么其1的个数等于N/2的二进制表示中1的个数加1
* </p>
*
* @author wangchao
* @version 1.0.0
* @since 1.0.0
*
*/
public class Example2 {
private String function1(int n, StringBuilder sb, int count) {
int quotient = n / 2;// 商
int remainder = n - 2 * quotient;// 余数
if (remainder == 1) {
count++;
}
if (quotient == 0) {
sb.insert(0, remainder);
} else {
sb.insert(0, remainder);
this.function1(quotient, sb, count);
}
return sb.toString();
}
/**
* <p>
* 十进制转二进制
* </p>
*/
public String function1(int n) {
return this.function1(n, new StringBuilder(), 0);
}
public static void main(String[] args) {
Example2 em = new Example2();
String s = em.function1(9);
System.err.println(s);
}
}
计数的方法原本是想在递归里实现的,但是发现函数在return的时候,并没有按照预想的实现。所以,要实现计数的话,应该需要再写一个for循环遍历吧。如果以后找到了return失败的原因,再来更新代码。