二进制到十进制递归方法

时间:2015-03-11 20:25:28

标签: java recursion

我试图找出通过递归从二进制转换为十进制的方法。我的方法是从纸上完成的计算中构建的。如果二进制是" 1100" (十进制12),然后

 /*1100 ---> 12
      (1)*2 + "100"
    (2 + 1)*2 + "00"
      (6 + 0)*2 + "0"
         (12 + 0) + "" */

我已经坚持了一段时间。这就是我想出的。我很欣赏任何想法。感谢。

int binary2decimal(String b)
{
    if ("".equals(b))  //base case
        return 0;
    else               //general case
    {   if (b.length() == 1)
            return (b.charAt(0) - '0') + binary2decimal(b.substring(1));
        else
            return (b.charAt(0) - '0')*2 + binary2decimal(b.substring(1));
    }
}

2 个答案:

答案 0 :(得分:0)

int binary2decimal(String b)
{
        int dec = 0;
        int len = b.length();
        if (len >= 1)
        {
            dec = (b.charAt(len-1) - '0');
            if (len > 1) dec += binary2decimal(b.substring(0,len-1))<<1;
        }
        return dec;
}

重点是向后递归(即从LSB到MSB)

修改 binary2decimal(b.substring(0,len-2))需要升级到len-1,已修复

答案 1 :(得分:0)

这应该有效:

class binary {
    public static void main(String[] args)
    {
        int myBinary = binary2decimal("1100");
        System.out.println(myBinary); 
       //System.out.println(binary2decimal("1100")); 
    }
static int binary2decimal(String b) {
    int len = b.length();
    if (len == 0) return 0;
    String now = b.substring(0,1);
    String later = b.substring(1);
    return Integer.parseInt(now) * (int)Math.pow(2, len-1) + binary2decimal(later);     
  }
}

带输出:

OUTPUT : 12