Help - FATORIAIS?!

Oi pessoal, sou newba e to fazendo um exercicio da apostila da caelum…
que por incrivel que pareça estou empacado nele…
No exercicio, ele pede o seguinte

2-) Imprima os fatoriais de 1 a 10

O fatorial de 0 é 1
O fatorial de 1 é (0!) * 1 = 1
O fatorial de 2 é (1!) * 2 = 2
O fatorial de 3 é (2!) * 3 = 6
O fatorial de 1 é (3!) * 4 = 24

  • Faça um FOR que inicie uma variavel n (numero) como 1 e fatorial (resultado) como 1 e varie n de 1 até 10:

for(int n = 1, fatorial = 1; n <= 10; n++) {


Esse é o enunciado… bom eu sei q o fatorial de n = n-1 * n-2… o conceito matemático.

Mas nao sei como calcular em java tem algum indicador… ?
Quero bitolar esse fds e isso tá me segurando…

Obrigado!

public class Apagar 
{
	public static void main (String[] args)
	{
		for ( int i = 0; i <= 10; i++ )
			System.out.println("Fatorial de " + i + ": " + fatorial( i ));
	}
	
	public static double fatorial(int n)
	{
		return n == 0 ? 1 : n * fatorial( n - 1 );
	}
}

Brigado Thiago, funciona… mas ainda nao aprendi essa segunda parte do codigo q vc escreveu, entao, claro, nao entendi…
acredito q seja de forma diferente… pois no enunciado ele diz:

  • Faça um FOR que inicie uma variavel n (numero) como 1 e fatorial (resultado) como 1 e varie n de 1 até 10:

for(int n = 1, fatorial = 1; n <= 10; n++) {

alguma sugestão??
vlw

tentei algo assim:

[code]public class Fatoriais {

public static void main(String[] args) {
for(int i = 1, fatorial = 1; i <= 10; i++) {

	fatorial = i*(fatorial*(i-1));

	System.out.println(fatorial);

		}

}
}
[/code]
compilado OK, mas claro q nao funciona pq…
quando i = 1…
fatorial = 1*(1*(1-1))
fatorial = 1*(10)
fatorial = 1
0
fatorial = 0

Então fiz o seguinte:

[code]public class Fatoriais {

public static void main(String[] args) {
for(int i = 1, fatorial = 1; i <= 10; i++) {
/* bem mais simples do que pensava:
assim o fatorial vai sempre atualizando /
fatorial = i
fatorial;
System.out.println(fatorial);

		}

}
}[/code]

DONE!!!
:smiley:
100%

Realmente, a estrutura do for é muito bacana, pena que pode perder facilmente a legibilidade.

public class Fatorial{ public static void main(String[] args) { for(int i=0,f=1; i<10 ;System.out.println(++i + "! = " + (f *= i))); } }

foi mal mesmo ter ressussitar este topico mas eh que me surgio uma duvida nesta mesma classe soh que em vez de usar um FOR tava pretendendo unsar um while e fiz algo assim:

package calculos;

import java.util.Scanner;

public class Fatorial {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int n1,
            fatorial;

    System.out.println("Insira um número inteiro não negativo: ");
    n1 = input.nextInt();

    fatorial = n1 * (n1 - 1);

    if (n1 >= 1) {
        while (fatorial > 0) {
            fatorial = n1 * (n1 - 1);
            n1--;
        }
    }

    System.out.printf("O fatorial de %f é %f", n1, fatorial);
}
}

eu sei que tem alguma falha e que esse programa dah algum erro mas estou no caminho certo?

riquericco,
use o %d, afinal, vc tá exibindo inteiros.
E lendo sua fatorial:

if (n1 >= 1) { while (fatorial > 0) { fatorial = n1 * (n1 - 1); n1--; }}
Seu n1 sempre sairá com 0, não?Modifica aí…

pessoal me desculpem, mas estou viajando e não to entendendo nada neste exercicio de fatorial.
por gentileza, alguem poderia plicar a logica, to travando neste exercicio!!!

eu li todos os tópicos, mas mesmo assim to travando na logica na linguagem!!!

Imprima os fatoriais de 1 a 10;

[tags]
public class Fatorial{
public static void main(String[] args) {
for(int i=0,f=1; i<10 ;System.out.println(++i + "! = " + (f *= i)));
}
}
[/tags]

[quote=stevan]pessoal me desculpem, mas estou viajando e não to entendendo nada neste exercicio de fatorial.
por gentileza, alguem poderia plicar a logica, to travando neste exercicio!!!

eu li todos os tópicos, mas mesmo assim to travando na logica na linguagem!!!

Imprima os fatoriais de 1 a 10;

[tags]
public class Fatorial{
public static void main(String[] args) {
for(int i=0,f=1; i<10 ;System.out.println(++i + "! = " + (f *= i)));
}
}
[/tags][/quote]

Pessoal use a tag [code] para colocar o fonte. basta selecionar e clicar no botão code…

Quanto ao fatorial, dá uma olhada nesse tópico: http://www.guj.com.br/java/32890-fatorial :smiley:

BOA TARDE PESSOAL, ACHEI UMA OUTRA FORMA;

[code]
mport javax.swing.JOptionPane;

//IMPRIMIR A SOMA DE 1 ATÉ 1000
public class ExercicioDois {
public static void main (String [] args){
int soma;
int resultado = 0;
for (soma=1 ; soma<=1000 ; soma++){
resultado = soma +1;
JOptionPane.showMessageDialog(null, soma);

 }
}

}
/[code]

opa a tag q fecha é [.code] //Aqui vem seu código [./code] (sem esses pontos) :smiley:

import javax.swing.JOptionPane;

//IMPRIMIR A SOMA DE 1 ATÉ 1000
public class ExercicioDois {
         public static void main (String [] args){
             int soma;
             int resultado = 0;
             for (soma=1 ; soma<=1000 ; soma++){
                resultado = soma +1;
                JOptionPane.showMessageDialog(null, soma);
             }
         }
}

:smiley: fica + legível assim, conseguiu sanar suas dúvidas?

OBRIGADO AMIGO, SOU NOVO POR AQUI, ESSAS COISAS VAMOS SEMPRE APRENDENDO.
[.code]
mport javax.swing.JOptionPane;

//IMPRIMIR A SOMA DE 1 ATÉ 1000
public class ExercicioDois {
public static void main (String [] args){
int soma;
int resultado = 0;
for (soma=1 ; soma<=1000 ; soma++){
resultado = soma +1;
JOptionPane.showMessageDialog(null, soma);
}
}
}
[./code]

eu coloquei . para você ver a tag mas vc tem que tirar rs :smiley:

Oi estevan

Fatorial com recursividade.

Existe a técnica de recursividade que é a capacidade do método(algoritmo) chamar a si próprio. Como está fazendo o exemplo postado abaixo.
Contudo cuidado para empregar esta técnica. Existem algumas vantagem que no caso é deixar o código mais limpo menor e fácil de entender.
E tem algumas desvantagens como o caso exigir mais do recurso físico como usar mais memória já que cada vez que o método se chama é feito um empilhamento de endereçamento.
Por isso é aconselhável utilizar a técnica da recursividade quando você tiver certeza do que está fazendo.
Este recurso não exclusividade do Java outras linguagens de programação moderna tem esta capacidade.

Repare que todo o problema se resolve entre as linhas 2 e 6.
Na linha 6 o método se chama diminuindo um do número e este processo é feito até chegar em zero quando termina processo e retorna o um.

class Fatorial {
	public static long fatorial(long numero){
		if (numero==0) {
			return 1;
		}
		return numero * fatorial(numero - 1);
	}
	public static void main(String[] args) {
		System.out.println(Fatorial.fatorial(Integer.parseInt(args[0])));
	}
}

Dê uma boa estudada nesse material: http://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf :smiley:

Desculpe, ressuscitar o tópico porem acredito que seja melhor ressuscitar um que criar outro sobre um tema pré-existente.

Como o iniciador da questão, estou estudando pela apostila da caelum e deparei-me com este exercício. Seguindo as instruções dada pela própria questão, encontrei uma solução, no entanto,como não tenho familiaridade com programação, sou uma iniciante neste universo, gostaria de que alguem podesse comentar minha resposta e apontar defeitos que possa ter.

[quote]As instruções da questão são:
Imprima os fatoriais de 1 a 10.
O fatorial de um número n é n * n-1 * n-2 … até n = 1. Lembre-se de utilizar os parênteses.
O fatorial de 0 é 1
O fatorial de 1 é (0!) * 1 = 1
O fatorial de 2 é (1!) * 2 = 2
O fatorial de 3 é (2!) * 3 = 6
O fatorial de 4 é (3!) * 4 = 24
Faça um for que inicie uma variável n (número) como 1 e fatorial (resultado) como 1 e varia n de 1 até 10:
for (int n = 1, fatorial = 1; n <= 10; n++) {
}[/quote]

Minha solução limitada ao que foi pedido.

[code]class Exercicio3 {

public static void main (String [] args){

System.out.println(“O fatorial de 0 é 1”);

for (int n = 1, fatorial = 1; n <= 40; n++)
{
fatorial=fatorial*n;
System.out.println(“O fatorial de " +n +” é ("+(n-1)+"!) * " + n + " = "+ fatorial);

}

}
}
[/code]