Creo haberlo entendido, pero antes de entrar al código quiero compartirles lo que encontré sobre la epxlicación de porqué 0!=1:
"Supongamos que tenemos 3 coches, uno azul, otro verde y uno amarillo, y que queremos colocarlos uno detrás de otro. ¿Cuántas formas posibles hay de hacerlo?
Muy bien, 3! = 6 formas de colocarlos.
Supón ahora que sólo tenemos 2 coches y queremos hacer lo mismo de antes. ¿Cuántas formas hay?
En efecto, 2! = 2.
¿Y si vendemos un coche y nos quedamos sólo con uno? El verde, por ejemplo ¿Cuántas formas hay de ordenar un solo coche?
Claro, 1! = 1. Sólo hay una forma porque el conjunto, en este caso el coche, sólo está formado por un elemento.
Ahora, el quid de la cuestión… ¿Y si tenemos 0 coches? ¿Cómo los ordenamos?
Sólo hay una forma de ordenarlo, porque como físicamente no hay ningún coche que ordenar… el conjunto está formado por 0 elementos que se pueden combinar de una única forma, es decir, si seguimos aplicando el método que hemos seguido, obtenemos que 0! = 1.
Espero haberte ayudado a solucionar esta pregunta que solemos hacernos los estudiantes de primero y segundo de ingeniería, tanto en cálculo como en estadística." Tomado de https://es.quora.com/Por-qu%C3%A9-0-1 , Omar Jaramillo Alvarez
Entendida esta parte ahora si, repecto al código:
if (numero === 0 // porque factorial de 0 es igual a 1
numero === 1) // porque factorial de 1 es igual a 1, además esta condición determina el momento en que el loop se detiene.
Por eso return 1
function calcularFactorial(numero) {
if (numero === 0 || numero === 1) {
return 1;
} else {
return numero * calcularFactorial(numero - 1);
// basicamente estamos iniciando un bucle de cuenta regresiva así:
function calcularFactorial(5) {
if (numero === 0 || numero === 1) {
return 1;
} else {
return 5 * calcularFactorial(5 - 1);// aquí se invoca nuevamente la función sobre el número 5 -1 que ahora sería 4
function calcularFactorial(4) {
if (numero === 0 || numero === 1) {
return 1;
} else {
return 4 * calcularFactorial(4 - 1); // aquí se invoca nuevamente la función sobre el número 4 -1 que ahora sería 3
function calcularFactorial(**3**) {
if (numero === 0 || numero === 1) {
return 1;
} else {
return 3 * calcularFactorial(3 - 1); // aquí se invoca nuevamente la función sobre el número 3 -1 que ahora sería 2
function calcularFactorial(**2**) {
if (numero === 0 || numero === 1) {
return 1;
} else {
return 2 * calcularFactorial(2 - 1); // aquí se invoca nuevamente la función sobre el número 2 -1 que ahora sería 1
function calcularFactorial(**1**) {
if (numero === 0 ||** numero === 1)** {
return 1; // se quedaría aquí porque ya numero ===1
Corrijanme si me equivoco por favor porque me costó llegar a esta conclusión :')