Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Utilizando while para calcular o fatorial e a tabuada

A solução apresentada possui elementos do js que ainda não foram apresentados nas aulas (como o "for" e o "i"), os quais podem até ser compreendidos, mas não são tão claros sem um determinado conhecimento prévio, ainda mais para nós, alunos iniciantes.

Eu tentei utilizar o while para resolver essas questões do desafio, e gostaria de saber se os códigos estão corretos.

Primeiro a questão envolvendo o fatorial:

function calculoFatorial(numero) {
    if (numero === 0 || numero === 1) {
        return 1;
    } else {
        while (numero > 0) {
            numero * numero;
            numero--;
        }
    }
}

Agora a questão da tabuada:

function mostraTabuada(numero) {
    let multiplicador = 0;
    multiplicador++;
    while(multiplicador < 10) {
        console.log(numero * multiplicador);
    }
}
2 respostas

Olá, David.

Os códigos em si estão corretos, mas precisaria de algumas alterações mesmo seguindo essa sua ideia de utilizar o WHILE , por exemplo na questão do fatorial seria interessante atribuir a multiplicação a uma variável, e também adicionar o resultado em uma variável para calcular corretamente o fatorial. Segue como seria:

function calculoFatorial(numero) {
    if (numero === 0 || numero === 1) {
        return 1;
    } else {
        var resultado = 1;

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

        return resultado;
    }
}

Aqui estão as alterações que fiz:

  • Adição de uma variável resultado: Inicializa uma variável resultado com 1 antes de entrar no loop. Essa variável acumula o resultado do fatorial.
  • Atribuição correta no loop while: Usa resultado *= numero para multiplicar o resultado pelo numero atual e atribuir o resultado de volta à variável resultado.
  • Retorno do resultado no final: Após o loop, retorna o valor acumulado em resultado.

Em relação a questão da Tabuada, é que ela pode causar um loop infinito, então você teria que alterar algumas coisas, exemplo:

function mostraTabuada(numero) {
    let multiplicador = 1;  

    while (multiplicador < 10) {
        console.log(numero * multiplicador);
        multiplicador++;  
    }
}

Principais alterações:

  • Inicialização do multiplicador fora do loop: Agora, o multiplicador é inicializado fora do loop, para que seu valor não seja resetado a cada iteração.
  • Incremento do multiplicador dentro do loop: A operação multiplicador++ agora ocorre dentro do loop para garantir que ele seja incrementado a cada iteração.

Espero ter ajudado, qualquer dúvida ou melhoria nos meus códigos pode falar.

Bons estudos.

solução!

Olá Davi,

Tanto o for quanto o while cumprem a utilidade de repetir uma tarefa, então o primeiro código pode ser uma solução válida.

A questão sobre o for ser um pouco mais complicado: Realmente um "i" como variável no for pode ser confuso no começo, porém o for é algo muito mais utilizado em programação do que while (Diria umas 10x). Indicaria para renomear a variável "i" para algo com sintaxe que facilite a leitura do código, como "elemento", ou "item".

Sobre qual dos dois utilizar, fica a dica: Tenho um intervalo bem definido de elementos que vou iterar? Se sim, utilizo o for, caso contrário, utilizo o while.

Sobre o segundo código: Apenas precisa colocar um comando para incrementar a variável multiplicador. Caso contrário, o código irá gerar um loop infinito (Está uma armadilha do while...). Segue exemplo:

function mostraTabuada(numero) {
    let multiplicador = 0;

    while(multiplicador < 10) {
        console.log(numero * multiplicador);
        multiplicador++;
    }
}