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

Exibir Grande Sequencia de Fatoriais - Exercício 7 do curso "Java I: Primeiros passos" e aula "2. Variáveis e fluxo"

Oi pessoal.

Minha dúvida é referente ao curso "Java I: Primeiros passos", aula "2. Variáveis e fluxo" e Exercício 7. Neste exercício falasse de exibir os fatoriais do número 1 ao 40.

Entendi que o objetivo do exercício é mostrar a tamanho do número que cabe em cada variável, para que testemos além do Int, o Long e o BigInteger por exemplo.

Porém fiquei com a seguinte dúvida. Se eu realmente quiser exibir os fatorias do 1 ao 40 devo continuar o código da maneira que estou fazendo abaixo até o número 40, ou há uma maneira mais fácil?

class Exercicio7_FatoriaisDe1a40 {
    public static void main(String[] args) {

        long fatorial = 1;
        for (long n = 1; n <= 40; n++) {

            if ( n==1 || n ==2 ) {
                fatorial = fatorial * n;
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n > 2 && n <= 4) {
                fatorial = n * (n - 1) * (n - 2);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 5) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 6) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 7) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 8) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 9) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 10) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 11) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 12) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10) * (n - 11);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 13) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10) * (n - 11) * (n - 12);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 14) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10) * (n - 11) * (n - 12) * (n - 13);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 15) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10) * (n - 11) * (n - 12) * (n - 13) * (n - 14);
                System.out.println("fat(" + n + ") = " + fatorial);
            }
            if ( n == 16) {
                fatorial = n * (n - 1) * (n - 2) * (n - 3) * (n - 4) * (n - 5) * (n - 6) * (n - 7) * (n - 8) * (n - 9) * (n - 10) * (n - 11) * (n - 12) * (n - 13) * (n - 14) * (n - 15);
                System.out.println("fat(" + n + ") = " + fatorial);
            }  
        }
    }
}
3 respostas
solução!

Fala, Anderson, blz?

Então... Você pode usar a recursividade pra atingir esse objetivo.

class Fatorial {
    public static void main (String args[]) {
        for(long i=1; i<=40; i++) {
            System.out.println("Fatorial de " + i + " é " + fatorial(i));
        }
    }
    public static long fatorial(long num) {
        if (num <=1 ) {
            return 1; /** fatorial de 0 e 1 é 1 **/
        } else {
            return num * fatorial(num - 1); /** pulo do gato - a função fatorial chama ela mesma passando o número menos 1 **/
        }
    }
}

Qualquer dúvida, só postar! Abraço.

Muito bom cara. Obrigado pela dica.

Por nada! Bons estudos! Abraço.