Как я могу улучшить мою логику karatsuba, чтобы мой код работал? - PullRequest
1 голос
/ 10 мая 2019

Не могу заставить мой алгоритм Карацубы работать должным образом. В моем коде есть бесконечный цикл. Я думаю, что проблема начинается сразу после:

q = str(int(c) + int(d))

потому что нет возвращаемого значения. Почему никто не возвращается?

Мое расследование до сих пор привело меня к выводу, что мой бесконечный цикл:

pq = Karatsuba(p, q)

Повторная настройка моего кода, но пока ничего не получалось.

def Karatsuba( x, y):

    '''
    Input: Two n-digit positive integers. N must be a power of two.

    Output: The product of x and y.
    '''
    if len(x) == 1 and len(y) == 1:

        return int(x) * int(y)

    else:

        split = len(x) // 2

        a = x[:split]
        b = x[split:]
        c = y[:split]
        d = y[split:]

        ac = Karatsuba(a, c)
        bd = Karatsuba(b, d)

        p = str(int(a) + int(b))
        q = str(int(c) + int(d))

        pq = Karatsuba(p, q)

        adbc = pq - ac - bd


        return 10**len(x) * ac + (10**split) * adbc + bd

print(Karatsuba('1234', '5678'))

Ответ должен быть 7006652

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...