У меня есть рекурсивный алгоритм, такой как:
int alg(int n) {
if (n == 0)
return 2;
for (int i = 0; i<= n-1; ++i)
alg(i);
}
Очевидно, что n == 0
дело Θ(1)
, Однако у меня возникают проблемы с пониманием, как это действительно работает. Я имею в виду, что это должно быть что-то вроде:
T(n) = T(0) + T(1) + ... + T(n-1).
И тогда мы должны дать T(1), T(2), .., T(n-1) = xT(0)
, Я могу понять, как это происходит для n = 0 и n = 1, но для больших n это идет не так.
Вы можете наблюдать это:
T(n) = T(0) + T(1) + ... + T(n-2) + T(n-1)
T(n - 1) = T(0) + T(1) + ... + T(n-2)
Следовательно
T(n) = 2 * T(n-1)
На данный момент, мы можем сделать вывод, что сложность составляет O (2N). На самом деле, это Θ (2N).
Других решений пока нет …