@Quintis

Кто может обьяснить рекурсию?

Здравствуйте. Функция должна вернуть массив [6, 7, 8, 9] но в ней ошибка , не могу понять какая.Спасибо

function rangeOfNumbers(startNum, endNum) {
 
  let numArr = [];
  
  if (startNum === endNum ) {
    numArr.push(endNum)
    return numArr;
  }  else  {
   
    numArr.push(endNum)
   return rangeOfNumbers(startNum, endNum-1)


  }

};


console.log(rangeOfNumbers(6,9))
  • Вопрос задан
  • 149 просмотров
Решения вопроса 3
@xversus
Вы не учитываете результаты прошлых вызовов функции. При каждом вызове создается новый экземпляр массива и отбрасывается, после чего вызов делается снова. Кроме того, вы пушите элементы в неправильном порядке.

Более правильный вариант:
function rangeOfNumbers(startNum, endNum) {
   let numArr = [];
    if (startNum === endNum ) {
    numArr.push(endNum)
    return numArr;
  }  else  {
       numArr.push(startNum)
   return [...numArr, ...rangeOfNumbers(startNum + 1, endNum)]
  }
};

console.log(rangeOfNumbers(6,9))
Ответ написан
hzzzzl
@hzzzzl
или так, чтобы собираемый массив не торчал нигде вне функции

function rangeOfNumbers(startNum, endNum, accumulator = []) {

  accumulator.unshift(endNum)
  
  if (startNum === endNum ) {
    return accumulator;
  }  else  {
    return rangeOfNumbers(startNum, endNum-1, accumulator)
  }

};


в любом случае да, дело в том что ты let numArr = [] каждый раз обнуляешь при вызове функции
Ответ написан
KickeRocK
@KickeRocK
FrontFinish
let numArr = [];

function rangeOfNumbers(startNum, endNum) { 
  
  if (startNum === endNum ) {
    numArr.push(endNum)
    return numArr;
  }  else  {
   
    numArr.push(endNum)
   return rangeOfNumbers(startNum, endNum-1)


  }

};

Так?
p.s. Вы каждый заход функции перезаписываете результирующий массив в пустой, смысл рекурсии - использовать туже функцию, сохраняя результат вне
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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