Из-за рекурсии функцияdiv () вызывается до n раз.
Предположим, что простая арифметика с n-битными целыми числами занимает O (n) времени. (Это верно для всех больших целочисленных реализаций, о которых я знаю - например, в Python добавление 1 к большому целому копирует все это).
Тогда у нас есть конечное число O (n) операций, выполняемых до n раз. Это займет O (n ^ n) времени.
def divide(x, y):
assert y >= 1
if x == 0:
return 0, 0
q, r = divide(x // 2, y)
q *= 2
r *= 2
if x & 1:
r += 1
if r >= y:
r -= y
q += 1
return q, r