Fatorial Recursivo em Java

Publicado por Mariana Ribeiro Mendes (última atualização em 15/09/2012)

[ Hits: 33.151 ]

Download 5549.Fatorial.java




O algoritmo a seguir calcula recursivamente o fatorial de um número dado pelo usuário.  É interessante prestarmos atenção em que, como os valores de um fatorial crescem exponencialmente e o algoritmo utiliza int, o valor máximo a ser passado deverá ser 12. Vocês podem testá-lo com long, no entanto o maior valor de long será excedido quando se passa dos 21 (os cálculos começaram a sair errado, façam o teste). Se quiserem, tentem também realizar estes cálculos com double e float.

Espero que seja de ajuda. Qualquer dúvida sintam-se livres para perguntar.


  



Esconder código-fonte

//Importa a classe Scanner para realizar leituras do teclado.
import java.util.Scanner;

/**
 * Este é um algoritmo que calcula o fatorial de um número utilizando as artimanhas
 * da recursão.
 * Este algoritmo foi baseado na versão em C de um amigo.
 * Vocês podem encontra-lo em: www.vivaolinux.com.br/script/Fatorial-Recursivo
 * Espero que seja de ajuda ao pessoal que está começando agora. xD
 */

public class Fatorial {

    /**
     * Este é um método estático que faz o calculo do fatorial de um número que é
     * passado como parâmetro e retorna para a função principal o resultado.
    */
    public static int fatorial(int num) {


        /**
         * Este é o caso base, se o número passado por parametro for 0 ou 1,
         * ele retorna o resultado 1 e finaliza o método.
         */
        if (num <= 1) {

            return 1;

        } else {

            /**
             * chama o método fatorial novamente, mas dessa vez enviando como
             * parametro (n - 1).
             */
            
            return fatorial(num - 1) * num;

        }

    }

    public static void main(String[] args) {

        //Declara uma variável para guardar o número que o usuário digitar
        int numero;

        //Instancia um objeto da classe Scanner para realizar a leitura do teclado (System.in)
        Scanner entrada = new Scanner(System.in);

        //Imprime na saída
        System.out.println("Digite o número que você pretende obter o fatorial.");

        /**Aqui a variável 'numero' irá receber a entrada que o usuário digitar.
         * A minha instancia de Scanner, no caso 'entrada', utilizará o método nextInt()
         * para ler o que vier do teclado como sendo um int.
         */
        numero = entrada.nextInt();

        //imprime o resultado do fatorial
        System.out.println("O fatorial de " + numero + " é " + fatorial(numero) + ".");


    }
}

Scripts recomendados

Trabalhando com Cores

Soma Gratificação Menos o IR.

Caixa de diálogo

Retorno de nomes (com gráficos)

Soma de Array


  

Comentários
[1] Comentário enviado por jarlisson em 19/09/2012 - 23:22h

Em C a gente tem uns tipos maiores, tipo unsigned long long.
Infelizmente em Java não temos muito pra onde correr com os primitivos.
Se bem que em ambos casos, não da pra ir muito longe porque o fatorial cresce rápido demais.

Mas o Java tem uma saída muito bacana pra lidar com isso, que é uma classe chamada BigInteger:
http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

[2] Comentário enviado por DMS_ em 03/10/2012 - 19:47h

Legal, fiz fatorial recursivo em C, realmente fica bem menor do que java.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts