Я пытаюсь реализовать алгоритм умножения Карацубы на 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
? Если да, то я где-то напортачил, потому что рекурсия не останавливается.
Кто-нибудь может указать, где ошибка?