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

[Dúvida] Dúvida sobre Exercício de Fatorial (Lógica de programação: explore funções e listas)

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

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

  return fatorial;
} 

Eu quebrei tanto a cabeça aqui já mas continuo sem entender esse trecho da linha de código:

let fatorial = 1;

for (let i = 2; i <= numero; i++)

(1) Por que o fatorial = 1?

(2) Por que botou (let i = 2; i <= numero; i++)? (essa eu admito, não entendi nada nada nada dessa linha T.T)

2 respostas
solução!

Fala ai Pedro, tudo bem?

Então, para entendermos bem esse código devemos entender como funciona um fatorial. O fatorial é uma operação matemática usada no estudo de análise combinatória. Um fatorial é representado por um número seguido de um simbolo de exclamação (!), como exemplo: Quando usamos 5! estamos dizendo que queremos usar o fatorial de 5.

A ideia de um fatorial é a multiplicação do número informado por todos os seus antecessores maiores que zero (basicamente a multiplicação de 1 até o número informado). Seguindo o exemplo acima:

5! = 1 * 2 * 3 * 4 * 5

Ou seja, no código informado criamos a variável fatorial com o valor 1. E fazemos um loop que faz nossa variável i que faz ele ter o valor de 2 até o número informado. Além disso, no nosso loop nos multiplicamos nossa variável fatorial com a variável i.

Seguindo essa ideia, vamos passar o valor 5 como parâmetro da sua função (como valor para numero) e fazer um teste de mesa:

  • Na primeira repetição do loop vai ser 1 * 2;
  • Na segunda 2 * 3, onde 2 é o valor de 1 * 2;
  • Na terceira 6 * 4, onde 6 é o valor de 1 * 2 * 3;
  • Na quarta 24 * 5, onde 24 é o valor de 1 * 2 * 3 * 4;
  • Após isso, chegou até o valor 5 e temos o resultado: 120. Logo: 5! = 120.

Espero ter te ajudado, qualquer dúvida é só avisar aqui no fórum.

Esse cálculo de Fatorial dá para ser resolvido de diferentes maneiras. Ele colocou o 2 porque é o primeiro número a vir depois de 1 (que já tá incluido ali no IF/ELSE).

Eu fiz de uma maneira um pouco diferente:

function calcularFatorial(num){
    if(num === 0){
        return 1;
    } else{
        let fatorial = 1;
        for(let i = num; i>=1 ; i--){
           fatorial *= i;
        }
        return fatorial;
    }
}