3
respostas

Fatorial!

Minha dúvida é a seguinte, como na parte comentada do código.

public class Fatorial { public static void main(String[] args) { int fatorial = 1; for(int numero = 1; numero < 11; numero ++ ) { fatorial = fatorial * numero;

// pra mim esse fatorial sempre vai estar com o seu valor 1 e no papel isso não da certo, o que quero saber é se o valor anterior ao proximo incrementado fica alocado em fatorial

                System.out.println("O fatorial de " + numero + " é " + fatorial);
    }
}

}

3 respostas

Gabriel, beleza ?

Veja no código abaixo :

import java.util.*;

public class Fatorial {

    /**
     * @param args
     */

        // TODO Auto-generated method stub
        Scanner ler = new Scanner(System.in);
        public static int fatorial(int Numero_para_fatorar){
            if(Numero_para_fatorar == 1 || Numero_para_fatorar == 0){
                System.out.print("1");
                return 1;
            }
            System.out.print(Numero_para_fatorar + " * ");
            return fatorial(Numero_para_fatorar-1) * Numero_para_fatorar;
        }

        public static void main(String args[]) {
            int contador, fatorial;
            for(contador=11; contador>0;contador--){
                fatorial = 1;
                System.out.print("fatorial de ("+contador+")  = ");
                fatorial = fatorial(contador);
                System.out.println(" = " + fatorial);

        }

    }

}

Que existe a trativa para valores <1 , no papel não dá certo porque você está se esquecendo deste cenário.

Pra ser sincera eu ainda não consigo ver como que o "fatorial" (do primeiro código) ele é incrementado para fazer sentido e mesmo no papel e no código dar certo.

Oi Gabrielle, tudo bem?

Vamos passo a passo, no começo nós temos a variável fatorial valendo 1, é aqui que vamos realizar a incrementação.

Depois temos um laço for onde, dentro dele, temos a variável numero valendo 1 também, o laço será executado 10 vezes e a cada execução será somado 1 ao seu valor anterior.

Pois bem, sobrou agora a lógica implementada dentro do laço:

fatorial = fatorial * numero;

O que essa linha faz, é pegar o valor do fatorial, multiplicar pelo valor do numero e por fim guardar o resultado dentro de fatorial. É como você disse, o resultado da multiplicação entre o fatorial e o numero fica alocado em fatorial para ser usado no próxima iteração.

1ª Iteração (fatorial de 1) : numero = 1multiplicado porfatorial = 1, guardamos o resultado emfatorialque agora passa a valer1

2ª Iteração (fatorial de 2) : numero = 2multiplicado porfatorial = 1, guardamos o resultado emfatorialque agora passa a valer2

3ª Iteração (fatorial de 3) : numero = 3multiplicado porfatorial = 2, guardamos o resultado emfatorialque agora passa a valer6

4ª Iteração (fatorial de 4) : numero = 4multiplicado porfatorial = 6, guardamos o resultado emfatorialque agora passa a valer24

5ª Iteração (fatorial de 5) : numero = 5multiplicado porfatorial = 24, guardamos o resultado emfatorialque agora passa a valer120

6ª Iteração (fatorial de 6) : numero = 6multiplicado porfatorial = 120, guardamos o resultado emfatorialque agora passa a valer720

e assim por diante até a 10ª iteração...

Espero ter ajudado, qualquer dúvida estamos à sua disposição!

Bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software