2014-10-08 3 views
0

Я пытаюсь написать функцию, которая добавляет два двоичных числа без преобразования. Мои коды следующие: я не знаю, почему это не работает.Python 3.2.5 Recursion

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

Я бы построил такую ​​функцию.

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

Он преобразует строку из базы 2 в целые числа, складывает их вместе, и снова возвращает двоичное строковое представление.

Использование:

add_bitwise('10101010', '1010101') 

возвращает

'0b11111111'