Acabo de empezar a aprender JS en Freecode y hacer esa tarea Use Recursion to Create a Range of Numbers). La función debe devolver una matriz de enteros que comienza con un número representado por el parámetro startNum y termina con un número representado por el parámetro endNum. El número inicial siempre será menor o igual que el número final. Su función debe usar recursividad llamándose a sí misma y no usar bucles de ningún tipo. También debería funcionar para los casos en los que tanto startNum como endNum sean iguales.
Mi solución está abajo
let myVal = []; function rangeOfNumbers(startNum, endNum) { if (startNum <= endNum) { myVal.push(startNum); startNum++; rangeOfNumbers(startNum, endNum); } return myVal; } rangeOfNumbers(2, 5);Normalmente debería funcionar bien, pero no sé por qué no es aceptable.
Puede eliminar la variable myVal por completo utilizando la sintaxis extendida para que su función devuelva la matriz de números de forma recursiva.
function rangeOfNumbers(startNum, endNum){ if(startNum <= endNum){ return [startNum,...rangeOfNumbers(startNum+1, endNum)]; } return []; } console.log(rangeOfNumbers(2,5));Para llamarlo de forma recursiva, debe dar a la matriz para que funcione:
function rangeOfNumbers(startNum, endNum, myVal){ if(startNum <= endNum){ myVal.push(startNum); startNum++; return rangeOfNumbers(startNum, endNum, myVal); } return myVal; }y llamar a la función de esta manera:
rangeOfNumbers(2, 5, []);Hay varias maneras de lograr esto.
let myVal = []; function rangeOfNumbers(startNum, endNum, myVal) { if (startNum === endNum) { myVal.push(startNum); return myVal; } myVal.push(startNum); return rangeOfNumbers(startNum + 1, endNum, myVal); } console.log(rangeOfNumbers(1, 10, myVal)); //[1, 2, 3, 4, 5,6, 7, 8, 9, 10]O, como no puede pasar la matriz a la función, intente esto en su lugar:
let myVal = []; function rangeOfNumbers(startNum, endNum) { if (startNum === endNum) { return myVal.push(startNum); } myVal.push(startNum); return rangeOfNumbers(startNum + 1, endNum); } rangeOfNumbers(1, 10); console.log(myVal); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Me funciono asi...Saludos
function rangeOfNumbers(startNum, endNum) {
if (startNum <= endNum) {
const countArray = rangeOfNumbers(startNum + 1, endNum);
countArray.unshift(startNum);
return countArray;
} return [];
}
console.log(rangeOfNumbers(1, 5));//[ 1, 2, 3, 4, 5 ]