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

408
Vistas
recursive FizzBuzz - why I can't reverse my array?

I am learning recursive functions. For fun, I tried the FizzBuzz coding challenge.

I am stuck as I don't understand why I can't reverse my array inside the recursive function.

Version 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' ]

To make it work, I have to place the recursive function inside another function.

Version 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' ]

Why does version 1 not properly and is there a way to make it work? Thanks in advance!

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

0

In your first example, you are reversing an array with a single element, then concatenating it with the array returned by the next recursive call. In effect, this will not reverse anything, and the results will be concatenated together starting at the deepest level of recursion.

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' ]

To achieve the reversal, simply swap the order of the concatenation, also making sure to return ['1'] inside of an array as your base case to make sure that it is able to concatenate with the other recursive calls.

about 4 years ago · Juan Pablo Isaza Denunciar

0

have a look at the below to reverse an array

Option 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 actually modifys the array.

Option 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']

Option 2 explanation loops through the arr and unshift the value. The unshift() method adds new items to the beginning of an array.

  • first time is adds ['Buzz'] to result array
  • second time it adds ['4', Buzz] to result array
  • third time is adds ['Fizz', '4', 'Buzz'] to result array
  • fourth time is adds ['2', 'Fizz', '4', 'Buzz'] to result array
  • fifth time is adds ['1', '2', 'Fizz', '4', 'Buzz'] to result array
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