Алгоритм Карацубы слишком много рекурсии

Я пытаюсь реализовать алгоритм умножения Карацубы на C ++, но сейчас я просто пытаюсь заставить его работать на Python.

Вот мой код:

def mult(x, y, b, m):
    if max(x, y) < b:
        return x * y

    bm = pow(b, m)
    x0 = x / bm
    x1 = x % bm
    y0 = y / bm
    y1 = y % bm

    z2 = mult(x1, y1, b, m)
    z0 = mult(x0, y0, b, m)
    z1 = mult(x1 + x0, y1 + y0, b, m) - z2 - z0

    return mult(z2, bm ** 2, b, m) + mult(z1, bm, b, m) + z0

Я не понимаю: как следует создать z2 , z1 и z0 ? Правильно ли рекурсивно использовать функцию mult ? Если да, то я где-то напортачил, потому что рекурсия не останавливается.

Кто-нибудь может указать, где ошибка?

6
задан greatwolf 17 January 2012 в 23:38
поделиться