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

Dúvida na resolução do exercício 2 do desafio

Olá, Boa noite. Consegui fazer os exercícios que foram deixados como desafio na aula 03. Na questão 02, sobre a função fatorial, cheguei na seguinte solução.

O meu código funcionou com todos os testes, porém, quando fui conferir as respostas não consegui entender o pensamento de quem elaborou a solução proposta, que foi a seguinte.

function calcularFatorial(numero) {
  if (numero === 0 || numero === 1) {
    return 1;
  }

  let fatorial = 1;
  for (let i = 2; i <= numero; i++) {
    fatorial *= i;
  }

  return fatorial;
}

Alguém poderia me explicar o porque de no laço for, foi passado uma let i recebendo esse valor 2?

2 respostas
solução!

Oi, Hugo! Tudo bem por aí?

Que legal saber que conseguiu realizar este e os demais exercícios, mando muito bem! :)

O fatorial de um número é a multiplicação desse número por todos os seus antecessores até chegar ao número 1. Em nossa função, fizemos o processo inverso (indo do 1 até o número passado como parâmetro de calcularFatorial), chegando no mesmo resultado.

No entanto, lembre-se que a multiplicação de qualquer número por 1 é o próprio número. Por isso, no código proposto, o loop começa com i = 2. Assim, evitamos multiplicar por 1 (que não altera o valor).

Podemos testar se isso é verdade substituindo o número 2 pelo número 1, assim:

for (let i = 1; i <= numero; i++) {
    fatorial *= i;
  }

Ao utilizar o número 5 como exemplo, o passo a passo realizado pelo for seria semelhante a este:

  • 1 *= 1 —> 1
  • 1 *= 2 —> 2
  • 2 *= 3 —> 6
  • 6 *= 4 —> 24
  • 24 *= 5 —> 120

Como a primeira etapa sempre resultará em 1, neste contexto, podemos pulá-la, atribuído direto ao i o número 2!

Hugo, espero ter ajudado a entender a solução proposta pela atividade! Caso surjam outras dúvidas, estarei por aqui.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá, Andrieli. Tudo ótimo, e contigo?

Acho que me embananei esquecendo que a ordem dos fatores não altera o resultado na hora de ler a solução proposta, mas agora, com a sua explicação ficou bem mais claro para mim. A solução que eu propus é a seguinte:

let calculaFatorial = (numero) =>
{
    if (numero === 0 || numero === 1)
    {
        return 1; 
    }
    for (let i = numero - 1; i >= 1; i--) {
        numero *= i;

      }
      return numero;
}

Apenas usei a mesma variável numero com o valor recebido e fui decrescendo-o no for. De resto ficou bem similar com a correção do exercício.

Enfim, Andrieli, obrigado pela resposta e mais obrigado ainda pela atenção na resposta. =)