#javascript #recursion #closures
#javascript #рекурсия #замыкания
Вопрос:
работа с рекурсией и замыканиями, но не получение правильного вывода. Блок рекурсии работает корректно, чтобы извлекать элементы, а затем добавлять их к общему числу.
но когда я пытаюсь реализовать закрытие проблемы, это не работает, и вывод — это просто функция вместо правильного вывода
let arr = [1, 2, 3, 4, 5];
function add(arr, total = 0) {
if (arr.length === 0) return total;
// console.log(total, 'total')
numberToAdd = arr[0];
// console.log(numberToAdd, 'number to be added to the total')
arr.shift();
// console.log(arr, 'array after taking out the first element', arr.length);
// console.log('total before recursion', total)
return num add(arr, total numberToAdd);
}
addTo15 = add(arr)
console.log(addTo15(100))
/** expected output: 115
*
* instead this outputs
*
* 100function(num) {
return num add(arr, total numberToAdd) ;
}
*/
Комментарии:
1. Есть ли функция, имя
num
которой где-то не показано в сообщении? ТакжеnumberToAdd
не был объявлен, поэтому он становитсяwindow
свойством при запуске кода в неаккуратном режиме. Еслиnum
определено и установлено значение number, тоaddTo15()
ошибки, потому что это не функция.
Ответ №1:
Ваш вопрос мне не совсем понятен, но я предполагаю, что вы хотите сделать что-то вроде этого:
const addArrTo = ([n, ...ns]) => (num) =>
n == undefined
? num
: addArrTo (ns) (num n)
const addTo15 = addArrTo ([1, 2, 3, 4, 5])
console .log (addTo15 (100))
который также может быть написан так, если он более знаком:
const addArrTo = (arr) => (num) =>
arr .length == 0
? num
: addArrTo (arr .slice (1)) (num arr [0])
или даже как
function addArrTo (arr) {
return function (num) {
return arr .length == 0
? num
: addArrTo (arr .slice (1)) (num arr [0])
}
}
Каждая из этих версий представляет собой функцию, которая принимает массив чисел и возвращает функцию. Возвращаемая функция принимает начальное число, а затем рекурсивно вызывает саму себя, добавляя текущее число из входного массива к текущему итогу.