Fatorial Java

18 respostas
Thiago_Java08

Boa noite!! Sou novo aqui no Forum e estou aprendendo Java Também… Estou na minha segunda aula de java e o professor pediu para calcular um fatorial de algum nº n. eu fiz da seguinte maneira só que está acontecendo um erro de calculo.

public class Fatorial {

public static void main (String [] args){
	
	int i, Fat = 4;
	 
	  for (i=1;i<=Fat;i+1){
		
		Fat=Fat*i;
		
	     	}System.out.print(Fat);
	     	
		}
	}
Por favor se alguem souber alguma maneira simples de calcular o Fatorial, e que possa me explicar, serei muito grato!!!

18 Respostas

felipemartinsss

Crie uma outra variável com o valor igual 1.
Então faça enquanto essa variável (resultado) for menor que Fat, resultado = resultado * i.
Imprima resultado

C
Simples:
int fat = 1;
int valor = 5; //ou qualquer outro valor que queira calcular;

for( int i = 2; i <= valor; i++ )
{ 
     fat *= i;
}

System.out.println( "O fatorial de " + valor + " é igual a " + fat );
}

Dá pra criar um método recursivo também, se quiser escrevo aqui...

abraço,

el_loko

public class ExemploFatorial { public static void main (String args[]) { for(long i=0; i<=10;i++) { System.out.println(i + "! = " + fatorial(i)); } } public static long fatorial(long num) { if (num <=1 ) return 1; else return num * fatorial(num - 1); } }

Você pode usar isso como exemplo…

PS: Antes de postar algum código novamente, da uma lida aqui
http://www.guj.com.br/posts/list/50115.java

Thiago_Java08

Muito Obrigado!!!
Agora sim deu certo!!

Thiago_Java08

Sr. Carnevalli se não for pedir muito poderia me ensinar o método recursivo???
Resaltando que tem que ser bem simples pois estou começando agora!!!

beginer

Olá thiago, eu tb sou novo no java, como também no mundo da programação. E que as vezes por mais que pesquizamos , há conceitos que não adquirimos a primeira. O forum decerto é meio que ajuda muito … e neste caso muito activo.

http://virtual.lncc.br/~rodrigo/cursos/unused/Java/05_Exercises/Exercicios_PR1_01%20(Resolvidos).pdf ( Package 1)

http://virtual.lncc.br/~rodrigo/cursos/unused/Java/05_Exercises/Exercicios_PR1_02%20(Resolvidos).pdf ( Pakage 2 )

Acho que deverias ver este site já recomendado pelo pessoal do forum

http://jedi.wv.com.br ( faz o registo _ aprendizagem interactiva muito bom mesmo)
Introdução à Programação I

São alguns exercicios que podes verificar , talvez te ajude.

Relativamente aos metodos , estou a iniciar e não me sinto nada a vontade .

Thiago_Java08

Muito obrigado beginer

C

Thiago_Java08:
Sr. Carnevalli se não for pedir muito poderia me ensinar o método recursivo???
Resaltando que tem que ser bem simples pois estou começando agora!!!

O método recursivo é esse que o el_loko postou em seguida ao que eu postei.

Abraços,

C

:smiley: :idea:

public class CalculaFatorial

{

public static void main(String arg[])

{

int n, fat=1;
n = Integer.parseInt(JOptionPane.showInputDialog("Qual número?"));
        if(numero < 0)
        {
            Integer.parseInt(JOptionPane.showMessageDialog(null, "Manê, não há fatorial de números negativos"));
        }    
            else
            {
                while(n > 1)
                {
                    fat *= n;
                    n--;
                }
            JOptionPane.showMessageDialog(null, "Resposta" + fat);
            }
    }

}

leandronsp

Concordo que o método recursivo seja o mais ideal deste caso.
Pra ficar mais claro pra vc, sobre oq é recursividade, pensa na seguinte questão: o fatorial de um numero X é o fatorial do número anterior a ele (X-1) multiplicado por ele mesmo.

FATORIAL DE X = X * FATORIAL DE X-1

Pensando desta forma, analise o seguinte código e vc vai perceber a importância e o siginificado da recursividade (neste caso):

public class FatorialMain {
	public static void main(String[] args) {
		String numero = JOptionPane.showInputDialog("Calcular fatorial do numero:" );
		int num = Integer.parseInt(numero);		
		JOptionPane.showMessageDialog(null,"Fatorial de " + num + " é " + fatorialDoNumero(num));		
	}
	
	private static long fatorialDoNumero(int num) {
		int anterior = num-1;
		long fatorialDesteNumero = 0;
		
		if (num <= 1) return 1;
			else fatorialDesteNumero =  num * fatorialDoNumero(anterior); // Aqui está a recursividade no programa. O método "fatorialDoNumero" é chamado várias vezes dentro dele mesmo.
		
		return fatorialDesteNumero;
	}

}

Note que quem escreve um código assim, não precisa ficar calculando uma lógica maluca pra retornar o fatorial. É como se o programador "conversasse" com o código.
A recursividade ajuda mto neste caso.

[]´s

E
Carnevalli:
Simples:
int fat = 1;
int valor = 5; //ou qualquer outro valor que queira calcular;

for( int i = 2; i <= valor; i++ )
{ 
     fat *= i;
}

System.out.println( "O fatorial de " + valor + " é igual a " + fat );
}

Dá pra criar um método recursivo também, se quiser escrevo aqui...

abraço,

Olá,
Eu estou começando a aprender JAVA e gostaria que me explicasse o que essa expressão "fat*=i" faz? Eu já entendi que ela calcula o fatoria dos numeros.. mas como isso eh feito?

FabioNoth

Pessoal consegui resolver o meu problema mais estou com uma dúvida.
Que está me mantando…

O que faz o

fat*= i;

Na verdade eu estou começando… e se alguma pessoal puder me explicar… ou comentar o código acima…
ira ajudar mesmo…

Obrigado

Rafael_da_Silva_Ferr
public class Exercicio4 {

public static void main (String args[]){

int fatorial = 1;

for (int inicio = 1; inicio <= 10; inicio++){

fatorial = fatorial * inicio;

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

}

Agnaldopps

Olá
Pessoal estou com um dificuldade.

Alguns dos meus resultados estão danto negativos eu não sei o porque, alguem pode me da uma dica do que estou errando?

public class ProgramaFatorial {

	public static void main (String []args){
		
		for (int i = 1, fatorial = 1; i <= 10; i++) {			
			fatorial *= -i;
			System.out.println("fatorial de " + i + " eh: " + fatorial);
		}
	}
}

fatorial de 1 eh: -1
fatorial de 2 eh: 2
fatorial de 3 eh: -6
fatorial de 4 eh: 24
fatorial de 5 eh: -120
fatorial de 6 eh: 720
fatorial de 7 eh: -5040
fatorial de 8 eh: 40320
fatorial de 9 eh: -362880
fatorial de 10 eh: 3628800

drigo.angelo

Olá, Bem vindo ao fórum :stuck_out_tongue:

Quando for postar seu código fonte, por favor utilize a formatação do fórum, este link explica como faze-lo caso tenha dúvidas

Quanto a sua dúvida, está dando resultados negativos porque você está multiplicando por menos i

Troque fatorial *= -i; por fatorial *= i;

Agnaldopps

Primeiramente desculpe por post com formato inadequado.
Noss muito obrigado eu não tinha nem visto foi no automatico kkk.

kk esse errinho que explode fuguetes kkk

V

Boa Tarde pessoal! Não to conseguindo entender direito sobre recursividade e meu professor me pediu p fazer um método recursivo para cálculo do exponencial de um número.
Se alguém tiver alguma ideia e puder me ajudar! Desde já, obrigada.

WellingtonRamos

Você entendeu o que você errou?

fat *= i equivale a fat = fat * i. É apenas uma forma “abreviada” de fazer isso (não lembro se, em tempo de execução faz diferença, mas se fizer, deve ser mínima).

Criado 23 de março de 2008
Ultima resposta 25 de mai. de 2010
Respostas 18
Participantes 14