@Atheist21

Почему return выводит undefined, а консоль результат?

Задача, при помощи рекурсии посчитать сумму числового ряда
Подскажите в чем проблема? return undefined, а console.log результат
function getSum(begin, end, sum) {
        if (sum === undefined) {
          sum = 0;
        }
        if (begin > end) {
          return NaN;
        }

        sum += begin;
        getSum(begin + 1, end, sum);

        if (begin === end) {
          console.log(sum);
          return sum;
        }
      }

      console.log(getSum(1, 5));
  • Вопрос задан
  • 501 просмотр
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Чтобы функция что-то вернула, где-то в ней должен быть достижимый оператор return с результатом вычислений.

Когда return условный, как у вас, то он может и не случиться. В этом случае функция выполнит всё, что должна, дойдёт до конца и ничего не вернёт. Точнее, по умолчанию она вернёт undefined.

Ещё важно, что если функцию вызвать просто так в качестве оператора, то её результат отбрасывается, какой бы он ни был:
getSum(begin + 1, end, sum);
В этом примере функция вызывается не как часть выражения, где её результат может быть использован, а сама по себе, как отдельная инструкция. Поэтому её результат нигде не сохраняется, и просто отбрасывается.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Karpion
У Вас странное представление о рекурсивной функции. Да и вообще о работе функций: есть правило "функция не должна менять свои аргументы".

Попробую написать решение в примитивном виде:
function getSum(begin, end) {
	return(begin + getSum(begin + 1, end)
}
Как видите, параметр sum тут не нужен. Ну и разумеется, надо дописать условие завершения рекурсии - их два, они у Вас уже есть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы