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

[Duda] Problema con el desafío 2

El desafío 2 lo hice de esta manera:

let numero = 10; let resultado = 1;

function total() { resultado *= numero; numero--; return resultado; }

while(numero > 0) { total(); }

console.log(total());

Para empezar utilice el while (que aún no nos han enseñado), porque no encontré otra forma de hacer que se repitiera. Pero ese no es mi problema en sí...

Mi problema es que el while no se detiene sino hasta llegar al cero, lo cual hace que mi resultado sea cero. Ya lo corregí cambiando la condición por "numero > 1". Pero no comprendo porqué sucede eso. Si mi condición dice "mayor que", ¿porqué llega hasta el cero?

2 respuestas
solución!

¡Hola Estudiante!

Gracias por compartir tu duda con nosotros. Entiendo que estás teniendo un problema con el desafío 2 y el uso del bucle while. Permíteme explicarte lo que está sucediendo.

En tu código, estás utilizando el bucle while para repetir la función total() hasta que la variable "numero" sea mayor que 0. Sin embargo, al final de cada iteración de la función total(), estás decrementando la variable "numero" en 1. Esto significa que eventualmente "numero" llegará a 0 y la condición del bucle while se cumplirá, lo que hace que el bucle se detenga.

El problema es que en la última iteración de la función total(), cuando "numero" es igual a 1, se realiza la multiplicación y el resultado se actualiza a 0. Luego, "numero" se decrementa a 0 y la condición del bucle while se cumple, lo que hace que se ejecute una última vez la función total(). En esta última iteración, la multiplicación se realiza con "numero" igual a 0, lo que resulta en un resultado de 0. Por eso obtienes un resultado final de 0.

Para solucionar este problema, puedes cambiar la condición del bucle while a "numero > 1" en lugar de "numero > 0". De esta manera, el bucle se detendrá cuando "numero" sea igual a 1 y no se ejecutará una última vez la función total(). Esto evitará que el resultado final sea 0.

Aquí está el código corregido:

let numero = 10;
let resultado = 1;

function total() {
    resultado *= numero;
    numero--;
    return resultado;
}

while(numero > 1) {
    total();
}

console.log(total());

Espero que esto aclare tu duda y te ayude a resolver el problema. Si tienes alguna otra pregunta, no dudes en preguntar. ¡Estoy aquí para ayudarte!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!

Hola, vi tu duda y me confundió a mi también en porque volvía a entrar al while siendo 0 el numero.

y el problema radica en que las modificaciones las estas haciendo afuera y antes del while, por eso no es que entra al while, sino que no necesita hacerlo.

entonces el código te quedaría como:

let numero = 10; let resultado = 1;

function total() { 
    
while(numero > 0) { 
    resultado *= numero; 
    numero--; 
    total(); 
}
return resultado;
}

console.log(total());