Вопрос №55479 от пользователя Сириус в уроке «Рекурсия», курс «Введение в программирование»

Сириус

Не понимаю, в Node.js - Replit всё работает отлично, причём в разных моих версиях кода, а тут нет: https://ru.hexlet.io/code_reviews/418222

5 0

Вячеслав Павлов

Сириус, здравствуйте.

Нет проверки на условие выхода из рекурсии (терминальное условие. Простыми словами, когда остановиться). Вывод тестов вам говорит, что произошло зацикливание (превышен размер стека).

FAIL  __tests__/sequenceSum.test.js

  ✕ solution (9 ms)

  ● solution

    RangeError: Maximum call stack size exceeded

      3 | const sequenceSum = (begin, end) => {
      4 |   // BEGIN (write your solution here)
    > 5 |   if (begin === end) {
        |   ^
      6 |     return end;
      7 |   }
      8 |     return begin + sequenceSum(begin + 1, end);

      at sequenceSum (sequenceSum.js:5:3)
      at sequenceSum (sequenceSum.js:8:20)
      at sequenceSum (sequenceSum.js:8:20)

Обратите внимание в задании на подсказку:

  • Последовательность, в которой begin > end, не содержит ни одного числа, т.е. является "пустой". Вычислить сумму чисел такой последовательности не представляется возможным, в этом случае возвращаем NaN.
0

Сириус

Вячеслав Павлов, я уже сам решил. В задании как-то не явно было указано, что мы должны сами напрямую вернуть NaN. Это дело вообще пустяк, из-за чего я потерял много часов. Я думал, что редактор сам выдадет ошибку в этом случае, что и происходило. Вы пишите, что

Нет проверки на условие выхода из рекурсии (терминальное условие. Простыми словами, когда остановиться). ...но

if (begin === end) {
    return end;
}
``` это разве не есть выход??? Функция же останавливается! ..?
0

Вячеслав Павлов

При begin = 5 и end = 1, что в вашем первом варианте происходит?

0

Сириус

Вячеслав Павлов, я вначале решил, что все подобные варианты будут автоматически выдавать NaN (ошибку выдавало, но другую) и проводил свои тесты с другими примерами, где всё ОК. Но сейчас уже полностью осознал код и ваше указание.

0

Maksim Litvinov

Добрый день! Остались ли у вас еще вопросы по этому упражнению? Если вам помог ответ Вячеслава, можете отметить его как решение. Это хороший способ поблагодарить за помощь и поможет другим участникам сообщества в поиске ответа на аналогичный вопрос.

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
1 июня 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
1 июня 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
1 июня 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
1 июня 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
1 июня 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
1 июня 5 месяцев