Сегодня в классе мой учитель написал на доске этот рекурсивный факториальный алгоритм:
int factorial(int n) {
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
Она сказала, что это имеет стоимость T(n-1) + 1
.
Затем с помощью итерационного метода она сказала, что T(n-1) = T(n-2) + 2 = T(n-3) + 3... T(nj) + j
, поэтому алгоритм останавливается, когда n - j = 1
, поэтому j = n - 1
.
После этого она заменила j
в T(nj) + j
и получила T(1) + n-1
.
Она прямо сказала, что для этого n-1 = 2 (log 2 n-1) поэтому стоимость алгоритма является экспоненциальной.
Я действительно потерял два последних шага. Может кто-нибудь, пожалуйста, объясните мне их?