Pular para o conteúdo

Fatorial Recursivo em 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.


Mariana Ribeiro Mendes meldenne
Hits: 34.503 Categoria: Java Subcategoria: Introdução
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Descrição

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.


Download 5549.Fatorial.java Enviar nova versão
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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) + ".");


    }
}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Comando if

Retorno de nomes (com gráficos)

Soma Gratificação Menos o IR.

aplicação simples em Java

Calculadora básica e simples de entender

#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

Entre na sua conta para comentar.