Factorial de un número en JavaScript con recursividad y ciclos

En este post vamos a ver cómo calcular el factorial de un número en JavaScript de dos maneras distintas. Una de ellas es usar un ciclo para calcular el factorial, y la otra es usando la recursividad o recursión.

Algoritmo para calcular factorial en JavaScript

Algoritmo para calcular factorial en JavaScript

También veremos el cálculo del factorial de un número usando a BigInt, un nuevo tipo de dato para JavaScript.

Factorial de un número

En términos simples (no soy matemático) el factorial es el resultado de multiplicar un número por todos los números menores a él hasta llegar a 1. Por ejemplo, el factorial de 5 es 120 porque 5 x 4 x 3 x 2 x 1 = 120, ya que 5 x 4 = 20, 20 x 3 = 60, 60 x 2 = 120 y 120 x 1 = 120.

La cosa se complica un poco cuando son números más grandes, ya que con un poco, se hace mucho. Por ejemplo, el factorial de 50 es 30414093201713378043612608166064768844377641568960512000000000000.

Requisitos y recomendaciones

Aquí usaremos const y funciones flecha en JavaScript, por favor lee los artículos en caso de que no sepas qué son. De esta manera mantenemos el código lo más actual posible, sin perder funcionalidad por ello.

También mira lo que son las template strings en JavaScript, no es obligatorio pero sí recomendado.

Calcular factorial de un número en JavaScript con ciclo while

El código es el siguiente:

Mientras el número sea mayor que 1, le vamos restando 1 hasta que se rompa el ciclo. En cada iteración, a la variable factorial se le va sumando el resultado de multiplicarlo por numero.

Por ejemplo, si numero es 3, entonces en la primera iteración factorial es 3, luego numero es 2 y ahora factorial es 6. Cuando numero es 1, se rompe el ciclo.

Al finalizar el ciclo, se regresa la variable factorial, la cual contiene el factorial del número. Por cierto, antes de ello se hacen comprobaciones como si el número es negativo, 0 o 1.

Factorial de un número en JavaScript con recursión

Ahora veamos el enfoque que usa la recursividad o recursión en JavaScript. Para ello, el código es el siguiente:

Si el número es menor o igual a 1, se rompe la recursividad y se regresa 1. Si no, entonces se regresa el resultado de multiplicar el número por el factorial del número -1. De esta manera se va restando el número hasta que el mismo se convierte en 1.

Por cierto, con Math.abs sacamos el valor absoluto, lo mismo que podríamos haber hecho en el ejemplo anterior, pero preferimos multiplicar por -1.

BigInt y el factorial de un número grande

Gracias a BigInt, se puede calcular el factorial de casi cualquier número, con el tiempo requerido pero pudiendo ser optimizados con los Web Workers de JavaScript.

En fin, si quieres saber cómo sería la implementación del cálculo del factorial con el tipo de dato BigInt en JavaScript aquí está el código:

¿Cuál es mejor?

No sé bien la ventaja de la recursividad, me parece que es más rápida su ejecución. Recomiendo que si vas a calcular el factorial en un escenario real uses el del ciclo while, porque con el de recursividad puedes exceder las llamadas a la pila.

Por cierto, creo que hay algoritmos más rápidos pero a su vez son más difíciles de implementar.

Ejecutar ejemplos

A excepción del ejemplo que usa BigInt, todos los ejemplos pueden ser ejecutados con Node.Js; recuerda primero instalarlo. Si quieres, descarga el código, guárdalo en un archivo (por ejemplo factorial.js), navega con la terminal hasta donde lo hayas guardado y ejecuta node factorial.js.

También puedes ejecutar el código en el navegador, poniendo todo en un <script> o pegando el código directamente en la consola.

Probar ejemplos online

Si no quieres salir del navegador, aquí dejo las 2 formas de calcular el factorial para ejecutarse en línea:

Ciclo while para calcular factorial en JS

 

Usar recursividad para calcular el factorial en JavaScript