El programa factorial más rápido en JavaScript

  1. Programa factorial que usa recursividad en JavaScript
  2. Programa factorial que usa iteración en JavaScript
  3. El programa factorial más rápido en JavaScript

El programa factorial se usa para encontrar los factores de un número dado. Por ejemplo, los factores del número 8 son 1, 2, 4 y 8. Los factores de ambos números 0 y 1 son siempre 1. De manera similar, cada número tiene algunos números factoriales.

Hay dos formas de escribir un programa factorial en JavaScript, una es utilizando la recursividad y otra es utilizando la iteración. Llamaremos a ambos programas 1000 veces usando el bucle for(), y cada vez que llamemos a este programa, encontraremos el factorial del número 1000.

Veamos ambas formas en detalle, y más adelante veremos cuál es el programa factorial más rápido.

Programa factorial que usa recursividad en JavaScript

El método recursivo es una forma de escribir el programa factorial. En recursividad, llamamos a la misma función una y otra vez con alguna condición base. La condición base asegura que no entremos en un bucle infinito.

Para comprobar el tiempo que se tarda en ejecutar el programa recursivo, utilizamos el método getItem() del objeto Date. La variable start almacenará la hora en que el programa inicia su ejecución, y la variable fin almacenará la hora en que el programa completa su ejecución.

Como sabemos, el factorial de un número cero es 1. Por lo tanto, haremos de esta nuestra condición base, y tan pronto como un número se convierta en cero, devolverá 1. De lo contrario, seguiremos encontrando el factorial de ese número llamando a la misma función factorial una y otra vez hasta que lleguemos a 0. La implementación del programa factorial usando recursividad es como se muestra a continuación.

let start, end;
start = new Date().getTime();

for (var i = 0; i < 10000; i++)
    recursionFactorial(1000)

function recursionFactorial(num){
    if (num === 0)
        return 1;
    else
        return num * recursionFactorial( num - 1 );
}

end = new Date().getTime();

console.log(end);

Producción:

1627808767415

La salida que se muestra arriba es el momento en que el programa recursivo completa su ejecución, que también se almacena en la variable end. El tiempo está en milisegundos y se imprime en la ventana de la consola del navegador.

Programa factorial que usa iteración en JavaScript

Otra forma de escribir un programa factorial es mediante la iteración. En iteración, usamos bucles como bucles for, while o do-while.

Aquí también comprobaremos el tiempo que lleva ejecutar el programa iterativo utilizando el método getItem() del objeto Date. La variable start2 almacenará la hora en que el programa inicia su ejecución, y end2 almacenará la hora en que el programa iterativo completa su ejecución.

En la función iterationFactorial(), inicialmente establecemos el contador en 1 y luego usamos un bucle for para encontrar los factores incrementando la variable counter. Al final, devolvemos el valor de la variable counter.

let start2, end2;
start2 = new Date().getTime();

for (var i = 0; i < 10000; i++)
    iterationFactorial(1000);

function iterationFactorial(num){
    var counter = 1;
    for (var i = 2; i <= num; i++)
        counter = counter * i;
    return counter;
}

end2 = new Date().getTime();

console.log(end2);

Producción:

1627808727136

La salida que se muestra arriba es el momento en que el programa finaliza, el programa de iteración completa su ejecución, que también se almacena en la variable end2. El tiempo está en milisegundos y se imprime en la ventana de la consola del navegador.

El programa factorial más rápido en JavaScript

Ahora que hemos visto tanto el programa de recursividad como de iteración para encontrar factorial de un número. Veamos ahora el resultado final (es decir, el tiempo necesario para ejecutar ambos programas) para ver cuál de estos dos programas factoriales es más rápido.

Ya hemos almacenado la hora de inicio y finalización del programa de recursión en las variables start y end y la hora del programa de iteración dentro de las variables start2 y end2. Ahora tenemos que restar la hora de finalización de la hora de inicio para obtener la hora resultante en milisegundos.

let res1 = end - start;
let res2 = end2 - start2;

console.log("res1: " + res1 + " res2: " + res2 )

Producción:

res1: 1626 res2: 27

Los resultados finales muestran que el programa de recursividad lleva mucho más tiempo que el programa de iteración. Por lo tanto, en JavaScript, el programa factorial de iteración es el más rápido. Esta salida puede variar según el sistema en el que ejecutará este programa.