временную сложность для мульт части можно найти так:
для вычисления (mult a b), (внутренний a aa) вызывается, пока a = 1
таким образом, у нас есть некоторая хвостовая рекурсия (цикл), которая повторяется по.
мы, таким образом, знаем, что временная сложность (mult a b) равна O (a) (= линейная временная сложность)
(к мощности m n) также имеет определение (внутренний х накопитель), которое также циклично (до x = 0)
так что снова у нас есть O (x) (= линейная сложность по времени)
Но : мы не учли время, необходимое для вызовов функций внутренних ...
Во внутренней части мы используем определение (mult a b), которое является линейным по временной сложности, поэтому мы имеем следующий случай:
в первой итерации mult вызывается с помощью: (mult 1 m) -> O (1)
вторая итерация это становится: (мульт м м) -> O (м)
третья итерация: (м² м²) -> O (м * м)
и так далее
Понятно, что это растет, пока n = 0 (или во внутреннем не станет x = 0)
Таким образом, мы можем сказать, что сложность времени будет зависеть от m и n: O (m ^ n)
[edit:] вы также можете взглянуть на связанный вопрос, который я задавал ранее: Big O, как вы рассчитываете / аппроксимируете его? , который может дать вам подсказку, как вы можете справиться с приближением в целом