Runtime satisfies recurrence T(n) =
4 T(n/2) +
O(n).
So by Master Theorem, T(n) =
O(n2) — no better than iterative algorithm!
(X1 + X0) (Y1 + Y0)
.
This computes p1 + p2 + p3 + p4
(using variables from the program above)
with only one recursive multiplication.multiply(X, Y): if n == 1: return x * y # multiplication of 1-bit integers else: set lists X1, X0, Y1, Y0 as above p1 = multiply(X1, Y1) p2 = multiply(X0+X1, Y0+Y1) p3 = multiply(X0, Y0) return 2**n * p1 + 2**(n/2) * (p2 - p1 - p3) + p3