java - 使用递归方法将二进制转换为十进制

标签 java recursion binary converters

我已经做了这么多,但我不知道该将什么放入我的递归方法的论证中。我不知道要在 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;
}

最佳答案

这是递归算法的另一个版本。每次迭代都采用最后一个二进制数字,计算字符串其余部分乘以 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);
        }
    }
}

关于java - 使用递归方法将二进制转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952046/

相关文章:

Java 正则表达式识别 Github 中错误的引用

java - 如何从多个列表中获取笛卡尔积?

c# - 这是递归还是迭代?

algorithm - 将迭代算法转换为递归

java - 使用递归打印先倒数再向上的对称整数序列

java - 如何使用JPA返回两个表之间的连接结果?

java - Android Studio蓝屏后无法解决错误

java - 二进制序列化协议(protocol)

binary - 如何从可执行文件/目标文件中查看 0 和 1/机器代码?

matlab - 在 Matlab 中对 float 进行位修改