#javascript #arrays #recursion
#javascript #массивы #рекурсия
Вопрос:
Эта функция должна рекурсивно добавлять все константы в массив, используя JavaScript. Есть идеи, почему я получаю ошибку типа в этой функции рекурсии?
const slowAdd = (array) => {
if (array.length === 0) return 0;
const restOfArray = array.slice(1);
return array[0] slowAdd(array[restOfArray]);
}
const dataArray = [2, 5, 7]
slowAdd(dataArray);
Та же проблема с использованием вспомогательной функции:
const fastSum = (array) => {
return _fastSum(array, 0);
};
const _fastSum = (array, start) => {
if (start === array.length) return 0;
return array[start] _fastSum(array, start 1);
}
const dataArray = [2, 5, 7]
console.log(fastSum(dataArray));
Почему fastSum
рекурсия работает, а первая — нет.
Комментарии:
1.
array[restOfArray]
это одно число, а не другой массив. РЕДАКТИРОВАТЬ: хорошо, на самом делеrestOfArray
это остальная часть массива. Я неправильно понял это и подумал, что это просто индекс. Во всяком случаеarray[restOfArray]
, конечно, не создает другой массив иslowAdd
ожидает массив2. @VLAZ Это даже не даст числа. Он вернет
undefined
3. @MaheerAli действительно. Я изначально неправильно прочитал код и подумал
restOfArray
, что это будет индекс. Однако, когда это массив , большую часть времени он будет выдаватьundefined
, как вы сказали.
Ответ №1:
restOfArray
сам по себе является массивом, и вы пытаетесь использовать его как индекс другого массива. array[restOfArray]
всегда будет возвращаться undefined
.
вы должны передать restOfArray
вместо array[restOfArray]
const slowAdd = (array)=>{
if(array.length === 0) return 0;
const restOfArray = array.slice(1);
return array[0] slowAdd(restOfArray);
}
const dataArray = [2, 5, 7]
console.log(slowAdd(dataArray));
//Same Problem with this one.
const fastSum = (array)=>{
return _fastSum(array, 0);
};
const _fastSum = (array, start)=>{
if(start === array.length) return 0;
return array[start] _fastSum(array, start 1);
}
console.log(fastSum(dataArray));
Ответ №2:
restOfArray — это массив
const slowAdd = (array) => {
if (array.length === 0) return 0;
const restOfArray = array.slice(1);
return array[0] slowAdd(restOfArray);
}
const dataArray = [2, 5, 7]
slowAdd(dataArray);