java version "1.8.0_92"
您好,
我正在尝试将使用迭代的此函数转换为递归函数。
public static String bitConversion(int x) {
List<Integer> binaryList = new ArrayList<Integer>();
while(x > 0) {
binaryList.add(x % 2);
x /= 2;
}
StringBuilder stringBuilder = new StringBuilder();
for(Integer binary : binaryList) {
stringBuilder.append(binary.toString());
}
return stringBuilder.toString();
}
我的尝试就是这个
public static String bitConversion(int x) {
List<Integer> binaryList = new ArrayList<Integer>();
if(x <= 0) {
StringBuilder stringBuilder = new StringBuilder();
for(Integer binary : binaryList) {
stringBuilder.append(binary.toString());
}
return stringBuilder.toString();
}
else {
binaryList.add(x % 2);
return bitConvert(x / 2);
}
}
有一件事是我需要使用binaryList来添加Integer。在完成所有事情的第一个条件中,我需要将它们放入一个字符串构建器中。在第二个条件中,我需要将它们添加到列表中。所以List必须是全局的两种条件。但是当函数调用自身时,每次都会重新初始化List。
关于编写这种递归函数的最佳方法有什么建议吗?
非常感谢任何建议。
答案 0 :(得分:5)
基本上,递归你有2个部分:1)递归终止条件2)你将手头的任务拆分成较小的部分而不是编写结果的部分。
public static String bitConversion(int x) {
// just simplifying my life here as negative numbers can be represented
// in a few ways and usually it's additive code I don't want to deal
// with here :)
if (x < 0) {
throw new IllegalArgumentException("Not implemented for negatives");
}
// recursion termination condition for 0 and 1
if (x <= 1) {
return String.valueOf(x);
}
// recurision
int leastSignificantBit = x % 2;
String significantBits = bitConversion(x / 2);
return significantBits + leastSignificantBit;
}
答案 1 :(得分:3)
public static String bitConversion(int x) {
if (x <= 0) return "";
else return x % 2 + bitConversion(x / 2);
}
上面的这个怎么样。坏的是它不使用StringBuilder。但是你可以实现类似的返回StringBuilder,然后用另一个方法将.toString中的调用包装起来。
答案 2 :(得分:2)
您的递归结束条件是x == 0,然后返回空字符串。当x> 0,你应该递归地调用x / 2的方法。
那么,这样的事情呢?
public static String bitConversion(int x) {
if (x == 0) {
return "";
}
return (x % 2) + bitConversion(x / 2);
}