此题我们有两种思路。
1. 递归方法参数包括二进制数,当前位置,总长度。每次递归将当前位置+1,直到当前位置==总长度时退出。
2. 递归方法参数只包括二进制数,每次判断最后一位是否为1,判断之后将最后一位删除,递归。直到当前字符串长度为0时退出。
第一种方法是我们的常见递归思路,还可以用在字符串全排列,选择排序上面。
以下为第一种思路代码。
public class Recursive1 {
static int sum = 0;
public static void main(String[] agrs) {
int num = 5;
String biStr = Integer.toBinaryString(num);
countOne(biStr, 0, biStr.length()-1);
//System.out.println(sum);
}
public static void countOne(String biStr, int now, int end) {
if(now > end) {
System.out.println(sum);
}else {
if(biStr.charAt(now) == '1') {
sum += 1;
}
countOne(biStr, now+1, end);
}
}
}
以下为第二种思路代码。
public class Recursive2 {
static int sum = 0;
public static void main(String[] agrs) {
int num = 5;
String biStr = Integer.toBinaryString(num);
countOne(biStr);
//System.out.println(sum);
}
public static void countOne(String biStr) {
if(biStr.length() == 0) {
System.out.println(sum);
}else
if(biStr.charAt(biStr.length()-1) == '1') {
sum+=1;
}
if(biStr.length() >= 1) {
countOne(biStr.substring(0,biStr.length()-1));
}
}
}