Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

415
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda