我已经完成了这么多工作,但我无法弄清楚我的参数应该放入我的递归方法中。我不知道要把什么放入 num1 =(Math.pow(base,(binToDecimal( s.length() - 1 )))); 。 s.length() - 1不起作用,因为它不是一个字符串,但我不知道在这里放什么。我的递归方法也是我的基础案例?我的想法是,每次,它每次减少一个字符串的长度,并在字符串的长度为零时停止,但我认为它不起作用。你也可以使用Math.pow来做这个吗?我在网上看过其他一些解决方案,但没有一个使用Math.pow
public static int binToDecimal(String s)
{
//base case
if(s.equals("1"))
return 1;
if(s.equals("0"))
return 0;
int num1 = 0;
int finalAnswer = 0;
int base = 2.0;
//recursive case
if(s.length() > 1)
num1 = (Math.pow(base,(binToDecimal(s.length()-1))));
finalAnswer = num1 + finalAnswer;
return
finalAnswer;
}
答案 0 :(得分:0)
这是递归算法的另一个版本。每次迭代取最后一位二进制数字,计算字符串其余部分的二进制值乘以2(向左移动),并将最后一位数的值加到其中。
public int binChar(char c) {
return c == '1' ? 1 : 0;
}
public int binToDecimal(String s) {
switch(s.length()) {
case 0: return 0;
case 1: return binChar(s.charAt(0));
default: {
int last = s.length() - 1;
char c = s.charAt(last);
s = s.substring(0,last);
return binToDecimal(s) * 2 + binChar(c);
}
}
}