Python中的封闭函数

时间:2014-10-10 16:33:24

标签: python string recursion

我正在尝试编写一个函数bin_to_dec(s),它接受​​一个二进制数字串并将其转换为相应的十进制数/整数。

我知道可能有内置方法来转换它,但我试图通过递归来完成它。这是我到目前为止编程的

我一直收到内存错误。如何编辑我的上一个语句以使其工作?

3 个答案:

答案 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])))