El factorial permite contar ordenamientos y aparece como una de las operaciones fundamentales de la combinatoria.
En los temas anteriores contamos configuraciones mediante sumas y productos. Cuando queremos ordenar todos los elementos distintos de un conjunto, aparece un producto especial: el factorial.
El factorial resume la multiplicación de todos los números enteros positivos desde 1 hasta un número dado. Su símbolo es el signo de admiración: n!.
Para un número entero no negativo n, el factorial se define como:
Por ejemplo:
El factorial crece rápidamente porque cada nuevo número multiplica el resultado anterior.
Los primeros valores del factorial son:
| n | Expresión | n! |
|---|---|---|
| 0 | 0! | 1 |
| 1 | 1 | 1 |
| 2 | 2 × 1 | 2 |
| 3 | 3 × 2 × 1 | 6 |
| 4 | 4 × 3 × 2 × 1 | 24 |
| 5 | 5 × 4 × 3 × 2 × 1 | 120 |
El caso 0! = 1 se establece por definición. Esta elección hace que muchas fórmulas combinatorias funcionen correctamente también cuando no se selecciona ningún elemento.
El factorial puede calcularse a partir del factorial anterior:
Por ejemplo, como 4! = 24, entonces:
Esta relación conecta el factorial con la idea de recurrencia, que estudiaremos con mayor profundidad en temas posteriores.
Indica un número entre 0 y 10 para observar los productos parciales que forman su factorial.
Si tenemos n objetos distintos y queremos ordenarlos todos, hay n! formas posibles:
En cada posición queda una opción menos porque los objetos no se repiten. Este es el fundamento de las permutaciones simples.
Con los elementos A, B y C, la cantidad de ordenamientos es:
Los seis ordenamientos son:
Cada secuencia utiliza los tres elementos exactamente una vez.
El factorial puede calcularse con un ciclo que multiplica los valores desde 1 hasta n.
function factorial(n) {
let resultado = 1;
for (let valor = 2; valor <= n; valor += 1) {
resultado *= valor;
}
return resultado;
}
console.log(factorial(5));
La variable resultado comienza en 1 porque no modifica la multiplicación inicial. Para 0 y 1, la función devuelve 1.
La definición matemática del factorial también puede expresarse mediante una función que se llama a sí misma.
function factorialRecursivo(n) {
if (n === 0) return 1;
return n * factorialRecursivo(n - 1);
}
console.log(factorialRecursivo(4));
El caso base es 0! = 1. Sin un caso base, la función seguiría llamándose indefinidamente.
El factorial crece muy rápidamente:
Este crecimiento explica por qué enumerar todos los ordenamientos puede ser inviable incluso con una cantidad moderada de elementos.
Un algoritmo que genera todos los ordenamientos de n elementos puede necesitar procesar hasta n! resultados. Este crecimiento se denomina factorial y suele ser más rápido que el crecimiento exponencial de muchas funciones.
Conocer el factorial antes de programar una enumeración permite decidir si conviene buscar otra estrategia, aplicar restricciones o construir una solución que no genere todos los casos.
Podemos construir una tabla de valores factoriales para observar el crecimiento paso a paso.
let factorialActual = 1;
for (let n = 0; n <= 6; n += 1) {
if (n > 0) factorialActual *= n;
console.log(`${n}! = ${factorialActual}`);
}
El valor se actualiza multiplicando el factorial anterior por el nuevo número, en lugar de recomenzar el producto desde 1 cada vez.
El factorial resume una cadena de decisiones en la que cada posición dispone de una opción menos que la anterior. Por eso es la herramienta natural para contar ordenamientos de elementos diferentes.
En el próximo tema estudiaremos propiedades y aplicaciones del factorial para utilizarlo de forma más eficiente en problemas combinatorios.