Как рассчитать сложность времени для этого кода? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть эта задача для расчета сложности времени?

const iterate = a => {
  if (a === 5) {
    return;
  }
  for (var i = 0; i <= a; i++) {
    console.log(i);
    iterate(i + 1);
  }
};
iterate(0);

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вы получаете бесконечный цикл, потому что вы увеличиваете целевое значение на единицу, но вы запускаете оператор for с нуля, и это значение не изменяется, пока не достигнет конца стека.

for (var i = 0; i <= a; i++) {
    console.log(i);
    iterate(i + 1);
}

Это означает, что с первым нулевым значением вы снова вызываете функцию, и эта функция снова вызывает себя и так далее.

Результатом является эта непроверенная ошибка:

RangeError: Maximum call stack size exceeded
0 голосов
/ 09 мая 2019

Сложность алгоритма определяется только для алгоритмов, которые по (наиболее часто принимаемому) определению должны заканчиваться.

Код выше повторяется бесконечное количество раз. Таким образом, временная сложность кода не может быть определена.

Можно сказать O (n) , где n => бесконечность .

Приведенный выше код не останавливается, поскольку не существует условия для значения 'i', которое увеличивается до бесконечности.

...