@Sherlok_homs

Как понять рекурсию в коде ниже?

Изучаю JS, помогите разобрать код рекурсии

function multiply(arr, n) {
    if (n <= 0) {
      return 0;
    } else {
      return multiply(arr, n - 1) + arr[n - 1];
    }
  }


Объясните, пожалуйста, логику последнего return. Почему multiply([1], 0) будет равно 0? А multiply([2, 3, 4], 1) будет равно 2? Или multiply([2, 3, 4, 5], 3) равно 9?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Первый вопрос: потому что срабатывает условие n <= 0, и возвращается 0.

Второй вопрос: потому что число 2 в массиве находится в нулевом (1 - 1 = #0) элементе массива, именно оно суммируется с финальным 0, и эта сумма возвращается.

Третий вопрос: получается стартовый элемент 3 - 1 = #2, значит суммируются числа 4 + 3 + 2 + 0 = 9, потому что именно число 4 находится во #2-ом элементе массива.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
В этом и есть смысл обучения, чтобы ты сам понял почему рекурсия и массивы с индексами так работают.
По-другому это не работает
Ответ написан
Комментировать
@Barister
Почему multiply([1], 0) будет равно 0? А multiply([2, 3, 4], 1) будет равно 2? Или multiply([2, 3, 4, 5], 3) равно 9?


Если Вы про задание на freecodecamp, то Вы некорректно поняли условия задачи. Там нужно сделать рекурсивную функцию не для умножения, а для сложения. Write a recursive function, sum(arr, n), that returns the sum of the first n elements of an array arr.
То есть в тестах дается sum([1], 0) = 0; sum([2, 3, 4], 1) = 2; sum([2, 3, 4, 5], 3) = 9.
Ответ, как считается, уже дан выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы