Мне интересно, какой будет среда выполнения следующей рекурсивной функции:
int f(int n) {
if (n <= 1) {
return 1;
}
return f(n-1) + f(n-1);
}
Если вы думаете об этом как о дереве вызовов, каждый узел будет иметь 2 ветви. Количество узлов в этом дереве вызовов будет равно 2⁰ + 2¹ + 2² + 2³ + ... + 2 ^ n, что эквивалентно 2 ^ (n + 1) - 1. Таким образом, временная сложность этой функции должна быть O ( 2 ^ (n + 1) -1) при условии, что каждый вызов имеет постоянное время O (1) - я прав? Согласно книге, откуда у меня этот пример, сложность времени составляет O (2 ^ n). Я в замешательстве - что мне не хватает?