Ваш анализ неверен.T(n) = T(f(n/2)) + T(n/2) + 1
(Вы пропустили T(n/2)
, но программа должна сначала вычислить T(n/2)
, а затем запустить T(f(n/2))
).и это не T(T(n/2))
.
Теперь попробуйте рассмотреть f(n)
как значение функции funct1
.Предположим, n = 2^k
, f(2^k) = f(f(2^{k-1})) + 1 = f(f(2^{k-2}) + 1) + 1 = ... = f(f(f(...f(1) + 1..)+1)+1) + 1
.f(1) = 1
, f(2) = 2
, f(3) = 2
, f(4) = 3
, f(8) = f(f(4)) + 1 = f(3) + 1 = 3
, f(16) = f(f(8)) + 1 = f(3) + 1 = 3
и f(32) = f(f(16)) + 1 = f(3) + 1 = 3
.Как видите, он повторяется для всех значений 2^k
и f(2^k) = 3
.
Следовательно, T(n) = T(3) + T(n/2) + 1 = O(log n)
.