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

Urgente! por favor me ajudem erro ao criar uma função fatorial usando o contador 'for'...

Oi pessoal, gostaria de criar uma função fatorial usando o contador for, que calcule o fatorial do parâmetro numero...

•lembrando que 0! = 1 e 1! = 1

Meu código está assim:

function fatorial (numero) {
let num = 0;

for (let i = numero; i > numero; i--) {

num *= num(i);
}
return num;
}

Tem algo dando erro... pensei se este raciocínio do fatorial, ajudaria: n! = n(n-1).(n-2)...3.2.1

Obrigado pela força!

3 respostas

Oi, Nelson, tudo bem?

Eu adaptei a sugestão de código para um formato mais dinâmico, utilizando o html, vamos ao código:

<!DOCTYPE html>
<html>
  <body>
    <h1>Calculadora de Fatorial</h1>
    <label
      >Qual fatorial deseja calcular?<input
        class="valor"
        type="text"
        required=""
    /></label>
    <button id="button" onclick="fatorial()">Calcula Fatorial</button>
    <div id="container"></div>

    <script>
    function fatorial() {
        let valor = parseInt(document.querySelector(".valor").value);
        let contador = 1;
        for (let i = valor; i > 1; i--) {
          contador *= i;
        }
        document.getElementById("container").innerHTML +=
          "<br>" + contador + "<br />";
        console.log(contador);
      }
    </script>
  </body>
</html>

O problema do seu código acima era que a variável let num = 0 estava sendo inicializada com 0, precisamos inicializa-la com um valor maior que 0:let num = 1 e no momento de fazer a multiplicação para termos o valor do fatorial, que precisa ser: contador = contador * i ou da forma mais reduzida contador *=1. Da forma como você fez você está multiplicando duas vezes a variável num (num =num(i) aqui a variável está pegando o valor de num1 duas vezes e alocando à num).

As demais diferenças no código foi por ter optado por uma tabuada dinâmica, odne o usuário adiciona uma valor desejado dentro do input, capturamos ele, fazemos o calculos e apresentamos numa div abaixo.

Espero ter te ajudado!

Oi Laís muito obrigado pela ajuda, mas, não me leve a mal... Sou um estudante beeem iniciante e não entendi quase nada do teu código.

Esta questão se propõe a solucionar o problema com artifícios mais simples, com algum método semelhante ao que estou utilizando...

Consegui! a solução é esta:

function fatorial(numero) {
    let num = 1;
    for (let i = numero; i > 1; i--) {
        num *= i;
    }
    return num;
}
solução!

Certo, Nelson.

function fatorial(valor){
  let contador = 1;

        for(let i = valor; i > 1; i--){
      contador *= i;
    }
return contador;
}
fatorial(4);

A questão está na foma como foi declarada a lógica da multiplicação. Você está usando uma forma reduzida de fazer a multiplicação do termo num com o valor do i (índice) do for:

num = num *i;

ou

num *= i

Ambas as formas tem o mesmo retorno, a primeira é literal. a segunda forma declaramos reduzidamente, utilizando os operadores de atribuição;

a forma como você fez, você está dizendo: num recebe o valor da mulplicação de num(i)*num(i) que não é o esperado.

O código acima pode ser testado no console do navegador. Espero ter te ajudado e bons estudos! Qualquer outra dúvida é só falar!