Solucionado (ver solución)
Solucionado
(ver solución)
6
respuestas

[Duda] Necesito que me expliquen el ejercicio del factorial de un número.

Hola, no logro entender como funciona la logica tras el calculo del factorial de un número, si sé lo que es y como hacerlo con una calculadora, pero como codigo no logro comprenderlo, la solución propuesta es la siguiente es la que aparece en la siguiente linea, aunque solo la copie trantando de entenderla:

2.Crea una función que calcule el valor del factorial de un número pasado como parámetro.

codigo de javascript

Espero alguien me explique con peras y manzanas, no quisiera avanzar sin enterder por completo.

6 respuestas
solución!

hola boris... La sentencia return finaliza la ejecución de la función y especifica un valor para ser devuelto a quien llama a la función. en la primera parte solo esta cargada nuestra funcion. despues carga como variable un 5 luego llama a la funcion en la variable elegida hasta que completa el ciclo que esta realizando el return.

Tampoco lo entiendo, no comprendo esta parte:

if (numero === 0 || numero === 1) { return 1;

Se lee si el número es igual a 0 o igual a 1, entonces el resultado es 1, sin embargo cualquier número multiplicado por 0 es igual a 0, por lo tanto no entiendo porque es "return 1"...

Hola, Boris y Fernanda También tuve y sigo teniendo problema para entender la lógica tras esa solución, se que funciona pero no logro comprender la misma...

...sin embargo logre tener una mejor noción de la función con otra solución, aunque me parece algo redundante la parte de resultado=dato=numeroIngresado en las variables, si me pudieran ayudar a aclarar esa parte, se los agradecería mucho. :

// ------------------------------------------------------------------------------------

Salida en consola: El factorial de 5 es 120

//DESAFIÓ 2: CALCULO FACTORIAL -------------------------------------

function calculoFactorial (numeroIngresado); {

    let dato = numero ingresado;
    let resultado = dato;
    let factorial = 1;

    while (factorial < dato) {
        resultado = resultado * factorial;
        factorial ++;
    }

    console.log (`El factorial de ${dato} es ${resultado}`);

    return;

}

calculofactorial (5)

Tampoco lo entiendo, no comprendo esta parte:

if (numero === 0 || numero === 1) { return 1;

con respecto a esto, esta es la condicion de la funcion donde nos dice que si el numero que vamos a analizar es 0 ó 1 el valor que regresara es uno, ya que el numero factorial de 0 y de 1 es igual a uno, he ahi el porque la linea de ese codigo

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 :')

¿por que ese codigo con if-else se comporta como bucle si no hay while? ¿Siempre es asi?