1, 非递归实现 scala
/** * 把输入的二进制数字转换成十进制返回(非递归实现) * @param src 例如: "1111" * @return */ def binaryToDecWithOutRecur(src: String): Int = { if(!src.matches("[0|1]*")){ println("invalid input") return 0 } val tmp = src.reverse var res: Int = 0 for(i <- 0 to tmp.length - 1){ res += tmp.substring(i,i+1).toInt * (1 << i) } res }
2, 递归实现(线性递归) code
/** * 递归实现二进制串转换成十进制数据输出 * @param src * @return */ def binaryToDecRecur(src: String): Int = { if(!src.matches("[0|1]*")){ println("invalid input") return 0 } src.length match { case 0 => 0 case 1 => src.toInt * Math.pow(2,0).toInt case _ => binaryToDecRecur(src.substring(1,src.length)) + src.substring(0,1).toInt * (i << src.length - 1) } }
3, 递归实现(尾递归) 递归
/** * 递归实现二进制串转换成十进制数据输出(尾递归) * @param src * @param res * @return */ def binaryToDecTailRecur(src: String, res: Int): Int = { if(!src.matches("[0|1]*")){ println("invalid input") return 0 } src.length match { case 0|1 => res case _ => binaryToDecTailRecur(src.substring(0,src.length-1), res + src.substring(0,1).toInt * (1 << src.length - 1)) } } println(binaryToDecTailRecur("111110", 0))