Fatorial Java

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!!!
2 curtidas

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

Simples:

[code]
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 );
}[/code]

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

abraço,

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

Muito Obrigado!!!
Agora sim deu certo!!

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!!!

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 .

Muito obrigado beginer

[quote=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!!![/quote]

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

Abraços,

: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);
            }
    }

}

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

1 curtida

[quote=Carnevalli]Simples:

[code]
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 );
}[/code]

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

abraço,[/quote]

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?

1 curtida

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

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);

	}
	
}

}

1 curtida

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

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;

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

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.

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).