int fatorial = 1;
for (int n = 1; n <= 10; n++){
fatorial = fatorial * n;
System.out.println(fatorial);
}
Porque a variável recebe outro valor dentro do for? (Exercício de Fatoriais - FJ11)
8 Respostas
Para pensares um pouco:
Quando n for 3 será que fatorial será (ainda) 1? Qual foi o último número que ele imprimiu antes?
Já ouviu falar em teste de mesa?
Bom, é mais ou menos assim. Você isola as variáveis (que nada mais são que referências para valores que serão trabalhados) e, de acordo com o andamento do programa, você vai “anotando” as diversas alterações que podem ocorrer com cada uma das variáveis.
Por exemplo, logo no início da primeira execução do for, temos o seguinte:
n = 1;
fatorial = 1;
Após a primeira execução, temos:
n = 1;
fatorial = 1 (1 * 1);
No início da segunda, temos:
n = 2;
fatorial = 1;
Ao fim da segunda:
n = 2;
fatorial = 2 (n = 2 * fatorial = 1);
E, agora, responda o que o pmlm perguntou.
O sr. Julhao parece ser uma pessoa que entenderia melhor o paradigma funcional que o imperativo.
De fato, o conceito de “variável” não é trivial e não tem um correspondente simples na matemática ( http://en.wikipedia.org/wiki/Monad_(functional_programming) ).
pmlm
Quando n for 3, o fatorial é 2, ali no código, pra dar resultado 6. (3 * 2 = 6)
drsmachado
Entendi mais ou menos o que tu disse.
Mas eu ainda não entendi porque o fatorial muda de valor.
Desculpa se estou meio lento pra entender, auauau, mas é que não entendi mesmo.
“variável” quer dizer “algo que varia ou que muda”. É esse o significado em Java - variável é uma posição de memória que contém um valor que pode mudar à medida que o programa vai sendo executado. As mudanças normalmente são feitas via atribuição (ou seja, com o sinal de “=”).
Acho que entendi sua duvida, sera ?
for (int n = 1; n <= 10; n++){
fatorial = fatorial * n;
System.out.println(fatorial);
}
Simples, voce define um valor FORA do laço for certo ? quando ele entra no for, ele executa a instrucao do for ate N = 10, DEPOIS que ele sai do laço for, ou seja, la fora o fatorial = 1, depois que ele entra no for ele recebe varios valores, mas ele NAO VOLTA para as linhas antes do for, fui claro ?
ou seja, o que o entanglement quis dizer é que
nesse trecho do codigo
fatorial = fatorial * n;
a variavel fatorial, vai receber o valor de ela mesmo vezes o valor de n
se estive somente assim: (voce pode fazer este teste para ver)
fatorial = n;
a cada iteração (isso mesmo, iteração e não interação), sua variavel fatorial receberia +1, pois seu for incrementa +1 no final (n++)
Obrigado a todos, que me ajudaram, eu entendi o motivo de que ele muda o valor, é que eu pensava que o fatorial sempre ia ter o valor “1” ou 1 * n, e não que ele ia ter o valor da última multiplicação.
Agora eu entendi, é bem simples, mas obrigado a todos que me ajudaram, perguntei essa mesma pergunta em 3 Fóruns, e esse foi o único que me deram respostas, muito obrigado!
Abraços!