Fatorial Orientado a Objeto

Boa Tarde!

Não consigo identificar o erro para saber onde estou errando…

Obrigado

import javax.swing.*;

public class Fatorial{
	//metodo para calculo fatorial
        public static int fator(int f , int i , int num){
        	while (i++ < num){
        		f = f * i;
        		return f;   
        	}                
        } 
       
	//metodo principal
	public static void main(String args[]){
		//Declaração de Variáveis
		int num;
		
		//Entrada de Dados do Usuário
		num = Integer.parseInt(JOptionPane.showInputDialog("Digite um número"));  
		
		//Exibição dos dados
		
		JOptionPane.showMessageDialog(null, fator(num));
		
	}
	
}
public int fatorial(int n)
{
   if (n==0)
      return 1;
   else
       return n*fatorial(n-1);
}

Vc pode fazer de forma recursiva como mostrado logo a cima, mas se quer fazer interativo seu método deveria ser assim:


public int fatorial(int n)
{
    int f = 1;
    
    for(int i = 1; i<=n; i++)
        f *= i;
    
    return f;
}

ou com while:

public fatorial(int n)
{
    int i = 1; f = 1;
    
    while(i<=n)
        f *= i++; // primeiro ele efetua a peração de atribuição e depois realiza a operação de incremento
    
    return f;
}

Tem outra coisa tb. Para vc usar o metodo fator vc deve instanciar no método main um objeto da classe Fatorial e atraves dele acessar este.

Espero ter ajudado =)

Até \o/

Esqueci de falar…
A forma recursiva pode ser mais custosa em termos de tempo de execução, assim para calculos de um fatorial muito grande seria melhor da forma interativa.
Além tb dos valores estourarem a capacidade de um inteiro rapidamente… assim vc pode usar um double para o resultado.

Até \o/

Leia sobre Tail Recursion

http://danzig.jct.ac.il/java_class/recursion.html

Obriagdo a todos!!

Agora estou sem dúvidas!!!