Funciones recursivas Challenge javascript-3


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:



SOLUCIÓN ITERATIVA (Mediante un ciclo for)



SOLUCIÓN RECURSIVA (Función recursiva)



ANALIZANDO LA EJECUCIÓN:

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) => {



Aca preguntamos si el caché de nuestra función (factorial) no esta definido, la funcion crea el cache como un objeto vacio.

if (!this.cache) {
this.cache = {}
}



Si el cache ya existe y tiene algun valor, retorne ese cache con su valor.

if (this.cache[number]) {
return this.cache[number]
}



if (number === 1 || number === 0) {
return 1
}


y aca se usa el cache y su valor para hacer los calculos sucesivos del factorial (this.cache[number])

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