Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

413
Vistas
FizzBuzz recursivo: ¿por qué no puedo revertir mi matriz?

Estoy aprendiendo funciones recursivas. Por diversión, probé el desafío de codificación FizzBuzz.

Estoy atascado porque no entiendo por qué no puedo invertir mi matriz dentro de la función recursiva.

Versión 1

 const fizzBuzzRecursive = num => { let results = []; if (num === 1) { return '1'; } else { if (num % 3 === 0 && num % 5 === 0) { results.push('FizzBuzz'); } else if (num % 5 === 0) { results.push('Buzz'); } else if (num % 3 === 0) { results.push('Fizz'); } else { results.push(''+ num); } newResults = results.reverse('') return newResults.concat(fizzBuzzRecursive(num - 1)); } } console.log(fizzBuzzRecursive(5)); // prints [ 'Buzz', '4', 'Fizz', '2', '1' ]

Para que funcione, tengo que colocar la función recursiva dentro de otra función.

Versión 2

 const fizzBuzz = num => { const fizzBuzzRecursive = num => { let results = []; if (num === 1) { return '1'; } else { if (num % 3 === 0 && num % 5 === 0) { results.push('FizzBuzz'); } else if (num % 5 === 0) { results.push('Buzz'); } else if (num % 3 === 0) { results.push('Fizz'); } else { results.push(''+ num); } return results.concat(fizzBuzzRecursive(num - 1)); } } return fizzBuzzRecursive(num).reverse() }; console.log(fizzBuzz(5)); // prints [ '1', '2', 'Fizz', '4', 'Buzz' ]

¿Por qué la versión 1 no funciona correctamente y hay alguna manera de hacer que funcione? ¡Gracias por adelantado!

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En su primer ejemplo, está invirtiendo una matriz con un solo elemento y luego concatenándola con la matriz devuelta por la siguiente llamada recursiva. En efecto, esto no revertirá nada y los resultados se concatenarán a partir del nivel más profundo de recursividad.

 const fizzBuzzRecursive = num => { let results = []; if (num === 1) { return ['1']; } else { if (num % 3 === 0 && num % 5 === 0) { results.push('FizzBuzz'); } else if (num % 5 === 0) { results.push('Buzz'); } else if (num % 3 === 0) { results.push('Fizz'); } else { results.push(''+ num); } return fizzBuzzRecursive(num - 1).concat(results); } } console.log(fizzBuzzRecursive(5)); // prints [ '1', '2', 'Fizz', '4', 'Buzz' ]

Para lograr la inversión, simplemente cambie el orden de la concatenación, y también asegúrese de devolver ['1'] dentro de una matriz como su caso base para asegurarse de que pueda concatenarse con las otras llamadas recursivas.

about 4 years ago · Juan Pablo Isaza Denunciar

0

eche un vistazo a lo siguiente para invertir una matriz

Opción 1

 let arr = ['Buzz', '4', 'Fizz', '2', '1' ]; console.log(arr); // returns ['Buzz', '4', 'Fizz', '2', '1'] arr.reverse(); console.log(arr); // returns ['1', '2', 'Fizz', '4', 'Buzz']

NB arr.reverse en realidad modifica la matriz.

opcion 2

 function recursive(array){ let result = []; array.forEach((value, index) => { result.unshift(value); }) return result; } console.log(recursive(arr)); // returns ['1', '2', 'Fizz', '4', 'Buzz']

La explicación de la opción 2 recorre el arr y cambia el valor. El método unshift() agrega nuevos elementos al comienzo de una matriz.

  • la primera vez se agrega ['Buzz'] a la matriz de resultados
  • la segunda vez que agrega ['4', Buzz] a la matriz de resultados
  • la tercera vez se agrega ['Fizz', '4', 'Buzz'] a la matriz de resultados
  • la cuarta vez se agrega ['2', 'Fizz', '4', 'Buzz'] a la matriz de resultados
  • la quinta vez se agrega ['1', '2', 'Fizz', '4', 'Buzz'] a la matriz de resultados
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda