Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

410
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!