maiden
Junho 6, 2014, 11:55am
#1
Tenho o seguinte código:
int factR(int n) {
int result;
if(n==1)
return 1;
result = factR(n-1) * n;
return result;
}
Dentro do main tem:
public static void main(String args[]) {
Factorial f = new Factorial();
System.out.println("Factorial of 5 is " + f.factR(5));
}
Minha duvida é a seguinte:
quando entrar no método
if(5 == 1) false sai fora
result = factR(5-1) * 5;
isso significa que 5 -1 = 4
4 * 5 = 20
sendo que não tem nenhum laço como esse resultado pode ser 120?
Aparentemente, você não entendeu o princípio básico da recursão.
Nesse trecho:
result = factR(5-1) * 5;
antes da multiplicação por 5, será chamada o método factR() com o parâmetro 4. Ou seja, antes da multiplicação por 5, será calculado o fatorial de 4, que é 24.
24 * 5 é 120, que é o resultado final.
Dê uma lida nesse tópico a respeito: Entendendo recursão .
Abraço.
maiden
Junho 6, 2014, 1:20pm
#3
Demorou mais aprende:
int factR(int n) {
int result;
if(n==1)
return 1;
result = factR(n-1) * n;
return result;
}
/* teste de mesa
* n = 5 factR(4) * 5 = 120
n = 4 factR(3) * 4 = 24
n = 3 factR(2) * 3 = 6
n = 2 factR(1) * 2 = 2
n = 1
* */
usando o debug do eclipse deu pra perceber que dado o número ele vai pegando outras funções anteriores para fazer o calculo correto