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

[Sugestão] Refiz o código do desafio 2 Valor do Fatorial, para exercitar a lógica.

Percebi que a solução do exercício é executada definindo primeiramente um valor de referência para chegarmos ao valor do fatorial, no caso o número 5, e assim o contador vai sendo multiplicado em ordem crescente (1x2x3x4x5 e por diante) até que chegue no valor determinado.

let fatorial = 1; 
    for (let i = 2; i <= numero; i++) {
      console.log(`Agora o número é ${fatorial}`)    // mostrando o resultado no console.
      fatorial *= i;
    }

Ao invés da ordem decrescente (5x4x3x2x1). Então olhando isso resolvi refazer o trecho do código da maneira "convencional" afim de exercitar minha lógica no código. Adianto que aceito sugestões ou conselhos para a lógica, estamos juntos para aprender!!

function calcularFatorial(numero) {
    if (numero === 0 || numero === 1) {
      return 1;
    }
  
    let fatorial; // receberá o resultado da fatoração
  
    let proxNumFatorial = numero - 1; // será o próximo multiplicador depois do número declarado, se o NUM declarado é 8, o próx será 7
  
    let resultadoInicial = numero * proxNumFatorial;  // guardará o resultado inicial do NUM declarado e do seu próximo multiplicador
    console.log(`O número ${numero} multiplicado por ${proxNumFatorial} é igual a: `);
    console.log(resultadoInicial);
  
    function diminuirNumeroFatorial() {  // função que diminui o multiplicador
      return proxNumFatorial - 1;
    }
  
    let diminuaNumero = diminuirNumeroFatorial(); // guardando a função dentro de uma variável.
  
    if (diminuaNumero >= 1) { // condição onde detecta se o multiplicador é maior ou igual ao multiplicador mínimo, se sim executará as instruções abaixo
  
      fatorial = resultadoInicial; // fatorial guarda o valor do resultado inicial
  
      for (let i = diminuaNumero; i > 1; i--) { // estrutura de repetição, onde se i for maior ou igual ao multiplicador mínimo, será decrementado após as intruções
        console.log(`O número ${fatorial} multiplicado por ${i} é igual a: `);
        fatorial *= i; // multiplicação onde fatorial recebe o valor de fatorial * i, que após o final da intrução o valor de i diminui até que chegue a 1
        console.log(fatorial);
      }
    }
  
    return fatorial // retorna o resultado da fatoração
  
  }
  
  // Exemplo de uso
  let numero = 8;
  let resultado = calcularFatorial(numero);
  console.log(`O fatorial de ${numero} é ${resultado}`);
4 respostas

Oi, Lucas! Tudo bem?

Melhor forma de praticar a lógica é tentar outros caminhos mesmo. Isso aí!!!

Eu também fiz em ordem decrescente, mas fiz um pouco diferente e usei o while e não o for (só por uma questão de gosto mesmo, não faz muita diferença).

function calcularFatorial(numero)
{
    let fatorial = numero === 0 || numero === 1 ? 1 : numero;

    while (numero > 1)
    {
        fatorial *= (numero - 1);
        numero--;
    }
    return (fatorial);
}

let numero = 8;
let resultado = calcularFatorial(numero);
if (resultado < 0)
    alert('Não existe fatorial de número negativo');
else
    alert(`${numero}! = ${resultado}`);

Obs: Inseri um tratamento para os negativos, mas pode melhorar.

Bons estudos!

Se estiver buscando parceria para estudar, me chama lá no Discord da Alura (Thati Moreira).

Oi, Lucas!

Refatorei. O que acha?

function calcularFatorial(numero)
{
    let mensagem = '';
    
    if (numero < 0)
        mensagem = 'Não existe fatorial de número negativo';
    else
    {
        let fatorial = numero === 0 || numero === 1 ? 1 : numero;
        let contador = numero;
        
        while (contador > 1)
        {
            fatorial *= (contador - 1);
            contador--;
        }
        
        mensagem = `${numero}! = ${fatorial}`;
    }
    return (mensagem);
}

let numero = -8;
let resultado = calcularFatorial(numero);
alert(resultado);

Oi, Lucas ! Tudo bem?

Caso não haja mais dúvidas neste tópico, o ideal é encerrá-lo para não impactar na visualização das dúvidas dos demais colegas.

Abraços e bons estudos!

solução!

Opa, aconteceu algumas coisas e não lembrei de encerrar. Muito obrigado por ter tirado um tempo e pela ajuda!!! Gostei das suas sugestões!