我正在尝试编写一个函数bin_to_dec(s)
,它接受一个二进制数字串并将其转换为相应的十进制数/整数。
我知道可能有内置方法来转换它,但我试图通过递归来完成它。这是我到目前为止编程的
我一直收到内存错误。如何编辑我的上一个语句以使其工作?
答案 0 :(得分:3)
我会避免递归,但这不是你想要做的事情的必要条件。我会选择像
这样的东西def binToDec(s):
total = 0
for index, value in enumerate(s[::-1]):
total += int(value) * 2**index
return total
>>> binToDec('1100')
12
使用list comp的相同想法:
def binToDec(s):
return sum(int(value) * 2**index for index,value in enumerate(s[::-1]))
如果真的希望以递归方式执行
def binToDec(s):
if len(s) == 1:
return int(s)
else:
return binToDec(s[-1]) + 2*binToDec(s[:-1])
答案 1 :(得分:0)
import math
def bin_to_dec(s):
if s == '0':
return 0
elif s == '1':
return 1
elif s[0] == '0':
return bin_to_dec(s[1:])
else:
return int(math.pow(2, len(s) - 1)) + (bin_to_dec(s[1:]))
答案 2 :(得分:0)
这是一个基于@PeterPeiGuo的缩短(行内)递归版本:
def bin_to_dec(s):
return int(s[-1]) + (len(s)>1 and 2*(bin_to_dec(s[:-1])))