Big Oh Runtime рекурсивной суммы - PullRequest
0 голосов
/ 12 февраля 2019

Если я использую цикл for, чтобы найти сумму n чисел между 0 and n, мое время выполнения равно O(n).Но если я создам рекурсивную функцию, такую ​​как:

int sum(int n) {
    if(n == 0)
        return 0;
    return n + sum((n - 1));
}

Будет ли время выполнения по-прежнему равно O(n)?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

@ Ответ Primusa касается вашего рекурсивного вопроса во время выполнения.Хотя мой ответ не касается вашего вопроса во время выполнения, следует отметить, что вам не нужен алгоритм для этого.Закрытая формула для суммы (n+1)*(n) / 2.

, спасибо Карлу Гауссу!

0 голосов
/ 12 февраля 2019

Да, ваше время выполнения все равно будет O(N).Ваша рекурсивная функция будет «зацикливаться» N раза, пока не достигнет базового варианта.

Однако имейте в виду, что сложность пространства также равна O(N).Ваш язык должен сохранить n + ... перед оценкой sum((n - 1)), создавая стек рекурсивных вызовов длиной N.

...