El factorial de un entero positivo n, se define en principio como el producto de todos los números enteros positivos desde 1 (es decir, los números naturales) hasta n. Por ejemplo:
5! = 1 * 2 * 3 * 4 * 5 = 120
8! = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 = 40.320
definición de wikipedia
La recursividad es la capacidad de una función de llamarse a sí misma.
Las funciones recursivas tienen las siguientes características.
Se llaman a sí mismas.
Tienen de argumento un valor que cambio por cada iteración
Regresan algún valor definido en cada iteración
Tienen una condicional que define el fin del ciclo
Manejan un stack que es el orden de las ejecuciones de las iteraciones de la función, empezando por la última a llamar.
Para el caso de la factorial se puede solucionar de dos maneras:
Esto es la memoización: La capacidad de hacer que una función pura cuente con un mecanismo en el que pueda recordar valores ya computados para ahorrar recursos y tiempos. La idea es envolver una función en un mecanismo de caché, sin que el comportamiento de dicha función se vea alterado.
const factorial = (number) => {
if (!this.cache) {
this.cache = {}
}
if (this.cache[number]) {
return this.cache[number]
}
if (number === 1 || number === 0) {
return 1
}
this.cache[number] = number * factorial(number - 1)
return this.cache[number]
}
una vez hecho un calculo, en la función queda guardada en cache los calculos realizados para que cuando se vuelva a llamar la función, esta ya no haga los calculos innecesarios pues ya es están guardados.
La explicación la tomé de el abismo del null