Antes de que entremos de lleno a crear la función para calcular el factorial de un número, debemos entender lo que es la recursividad 🤓☝. Si bien suena algo compleja, en realidad maneja una metodología simple, la recursividad es un proceso en el que una función se llama a sí misma de forma repetida, hasta que se satisface alguna condición, a esta condición la llamamos caso base.
Por ejemplo, vamos a hacer una función que imprima la palabra “Seguimos iterando” una cantidad i de veces:
functioniteracionRecursiva(i){
//Caso Baseif(i == 0){
console.log("Ya se acabo!");return;
}
//Instrucciones
console.log("Seguimos iterando");
iteracionRecursiva(i - 1);
}
Si pruebas este código obtendrás esta salida:
"Seguimos iterando""Seguimos iterando""Seguimos iterando""Seguimos iterando""Seguimos iterando""Ya se acabo!"
Acabamos de crear un bucle ¡Sin bucles!
Ya vimos un ejemplo del caso base, este caso nos indica cuando nuestra función recursiva debe dejar de llamarse a sí misma. Es indispensable que tengamos un caso base para hacer nuestras funciones recursivas, ya que, de otro modo, nuestra función se llamaría a sí misma infinitas veces, es decir, crearíamos un bucle infinito, y no queremos eso, ¿Cierto?
Ahora sí, pensemos ¿Cuál sería el caso base del factorial de un número?. Una forma de identificarlo es pensar en un patrón que siempre se cumple al dividir nuestro problema en problemas más pequeños, por ejemplo, veamos los factoriales de algunos números:
5! = 5 * 4 * 3 * 2 * 1
4! = 4 * 3 * 2 * 1
256! = 256 * 255 * 254 … * 3 * 2 * 1
0! = 1
¿Qué patrón puedes notar aquí? Si observamos bien, podemos notar que el factorial de un número siempre, sin excepciones, se multiplica por uno al final, incluso cuando se trata del factorial de 0, esto quiere decir que podemos multiplicar un número por ese número menos uno (n * (n-1)) una y otra vez hasta que n sea 1 ¿Cierto?. Puede que ya en este punto imagines como sería el código.
Ahora que ya sabemos que nuestro caso base es multiplicar nuestro número por uno (Cuando n = 0, ya que trabajamos con iteraciones al revés, es decir: 5,4,3,2,1 y así), podemos imaginar un caso base en código:
functionfactorial(n){
//Caso baseif(n == 0){
return1;
}
}
Bien, pero, nuestro factorial no puede funcionar solo con el caso base, y es aquí dónde nuestra función recursiva hará su magia, ¿Cuál es el factorial de 3!? Pues 3 * 2!, ¿Y el de 2!? Pues 2 * 1!, y así sucesivamente, es decir, que podemos decir que el factorial de n es n * factorial(n-1) ¿Cierto?
Planteemoslo en código:
functionfactorial(n){
//Caso baseif(n == 0){
return1;
}
//Instrucciones
returnn *= factorial(n - 1);
}
¡Y listo! Ya nuestra función factorial está hecha, puedes probarla por ti mismo 😉.