Вопрос №55479 от пользователя Сириус в уроке «Рекурсия», курс «Введение в программирование»
Не понимаю, в Node.js - Replit всё работает отлично, причём в разных моих версиях кода, а тут нет: https://ru.hexlet.io/code_reviews/418222
Сириус, здравствуйте.
Нет проверки на условие выхода из рекурсии (терминальное условие. Простыми словами, когда остановиться). Вывод тестов вам говорит, что произошло зацикливание (превышен размер стека).
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.
Вячеслав Павлов, я уже сам решил. В задании как-то не явно было указано, что мы должны сами напрямую вернуть NaN. Это дело вообще пустяк, из-за чего я потерял много часов. Я думал, что редактор сам выдадет ошибку в этом случае, что и происходило. Вы пишите, что
Нет проверки на условие выхода из рекурсии (терминальное условие. Простыми словами, когда остановиться). ...но
if (begin === end) {
return end;
}
``` это разве не есть выход??? Функция же останавливается! ..?
При begin = 5 и end = 1, что в вашем первом варианте происходит?
Вячеслав Павлов, я вначале решил, что все подобные варианты будут автоматически выдавать NaN (ошибку выдавало, но другую) и проводил свои тесты с другими примерами, где всё ОК. Но сейчас уже полностью осознал код и ваше указание.
Добрый день! Остались ли у вас еще вопросы по этому упражнению? Если вам помог ответ Вячеслава, можете отметить его как решение. Это хороший способ поблагодарить за помощь и поможет другим участникам сообщества в поиске ответа на аналогичный вопрос.
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







