Python 3.2.5递归

时间:2014-10-08 03:18:19

标签: python

我正在尝试编写一个无需转换即可添加两个二进制数的函数。我的代码如下,我不知道为什么它不起作用。

def add_bitwise(s1, s2):
    """take two strings s1 and s2 that represent binary numbers,
    compute the sum of the numbers, and return that sum in the form of a string
    that represents a binary number
    """
    if s1 == "":
        return s2
    elif s2 == "":
        return s1
    else:
        rest = add_bitwise(s1[:-1], s2[:-1])
        if int(s1[-1]) + int(s2[-1]) == 0:
            return rest + "0"
        elif int(s1[-1]) + int(s2[-1]) == 1:
            return rest + "1"
        return add_bitwise(s1[:-1], str(int(s2[:-1])+1)) + str(int(s1[-1]) + int(s2[-1]) - 2)

所以我尝试使用从右到左的方法。如果s1和s2的最后两个数字都是“0”,则该函数返回“0”并继续;如果最后一个s1或s2中的一个为“1”而另一个最后一个数字为“0”,则该函数返回“1”并继续。不工作的部分是两个最后的数字都是“0”时,即需要进位的情况。

1 个答案:

答案 0 :(得分:1)

我会像这样构建函数。

def add_bitwise(s1, s2): 
    return bin(int(s1, 2) + int(s2, 2))

它将字符串从基数2转换为整数,将它们相加,然后再次返回二进制字符串表示。

用法:

 add_bitwise('10101010', '1010101')

返回

'0b11111111'