Factorial Fun es-419 Explainer

Explicador de Diversión factorial

Objetivo de este acertijo: Usar una función que se llame a sí misma recursivamente.

Tutorial de la solución:
La función factorial() toma un número como argumento y devuelve el producto de cada número hasta ese número. Por ejemplo, factorial(5) devolverá 120, como 5 * 4 * 3 * 2 * 1 = 120.

Para completar el acertijo, cambia el bloque de código dentro de la else statement de return number * factorial(number) a return number * factorial(number - 1).

Veamos dentro de la función para ver cómo funciona.

Dentro de la función hay una if…else statement. La if statement analiza si el número que pasó a la función es menor que o igual a 1. Si esto es verdadero, la función devolverá 1. Sin embargo, si el número es mayor que 1, se ejecutará el código en el bloque else.

Dentro del bloque else es donde las cosas se ponen difíciles. La función tomará el número y lo multiplicará por el resultado de la llamada nuevamente a la función, esta vez con number - 1 como un argumento.

Esto tendrá sentido si seguimos un número por la función. Intenta llamar a la función con 3 como un argumento: factorial(3):

La if statement verificará si el 3 es menor que o igual a 1. Dado que 3 es mayor que 1, se ejecutará el código en el bloque else. Esto devolverá 3 * factorial(2).

Ahora la ecuación es 3 * factorial(2).

La if statement verificará si el número nuevamente para ver si 2 es menor que o igual a 1. Esto sigue siendo falso, de modo que se ejecutará el bloque else; esta vez devolverá 2 * factorial(1) y llamará a la función nuevamente con 1 como el argumento de número.

Ahora nuestra ecuación es 3 * 2 * factorial(1).

Cuando la función se ejecuta nuevamente con 1 como el número, el bloque de código de la if statement se ejecutará porque 1 es menor que o igual a 1. Este bloque de código simplemente devuelve el número, y la función puede dejar de llamarse a sí misma. Esto es importante, porque llamar a una función recursivamente sin una condición que detenga a la función hará que la recursividad sea interminable, y no causará que un programa se detiene. sumUpTo(1) devuelve 1, y detiene la función.

Nuestra ecuación final es 3 * 2 * 1, que es igual a 6.

También se puede visualizar así:

factorial(3) → (3 * factorial(2))
factorial(2) → (2 * factorial(1))
factorial(1) → 1

Lo que se simplifica a:

factorial(3) → (3 * (2 * (1) ) ) 

Solución del código de ejemplo:
(Pulsa a continuación para revelar)

function factorial(number) {
  if (number <= 1) {
    return 1;
  } else {
    return number * factorial(number - 1);
  }
}

console.log(factorial(5));

Conceptos de JavaScript: recursividad, funciones, flujo de control, if…else statements