Exemplo de fatorial:
A chamada de um método para ele mesmo, é igual a chamada de qualquer outro método, exemplo de método recursivo que calcula o fatorial n!
O fatorial de um número é dado pela multiplicação de seus antecessores, ou seja, se n é igual 3, então seu fatorial será 3 * 2 * 1. O fatorial de 0! (zero) é igual a 1.
O método recursivo fica da seguinte forma:
package material.recursao;
public class Fatorial {
public static void main(String[] args) {
Fatorial r = new Fatorial();
int resp = r.fatorial(3);
System.out.println(resp);
}
/**
* Calcula o valor do fatorial para um número qualquer positivo.
*
* @param x - valor que será calculado o fatorial.
* @return O valor do fatorial.
*/
public int fatorial(int x) {
// Se x for igual a 0 (zero) então retorna 1.
if (x == 0)
return 1;
/* Para qualquer outro número, calcula o seu valor multiplicado
pelo fatorial de seu antecessor. */
return x * fatorial(x - 1);
}
}Dentro de um método recursivo é muito importante definirmos como será a condição base para que o método pare a recursão, ou seja, como o método vai parar de se chamar.
Neste caso queremos que o método para de chamar ele mesmo, quando o valor que será calculado o fatorial for igual a 0 (zero), pois neste caso sabemos a resposta direta sem ter que fazer cálculos.
Chamando o método fatorial(3), queremos calcular 3 * 2 * 1.
3 * fatorial(2) retorna (6)
2 * fatorial(1) retorna (2)
1 * fatorial(0) retorna (1)Explicando o fluxo do programa:
-
O método fatorial recebe o valor de
xigual a3, verifica sexé igual a0(zero), como não é igual, então calcula3multiplicado porfatorial(2), neste ponto estamos fazendo uma chamada recursiva. -
O método fatorial recebe o valor de
xigual a2, verifica sexé igual a0(zero), como não é igual, então calcula2multiplicado porfatorial(1). -
O método fatorial recebe o valor de
xigual a1, verifica sexé igual a0(zero), como não é igual, então calcula1multiplicado porfatorial(0). -
O método fatorial recebe o valor de
xigual a0(zero), verifica sexé igual a0(zero), então para a execução do método e retorna o valor1. -
Volta para o método
fatorial(1)na linha 26 e faz a multiplicação dexque vale1pelo resultado dofatorial(0)que é1, ou seja1 * 1e retorna o valor1. -
Volta para o método
fatorial(2)na linha 26 e faz a multiplicação dexque vale2pelo resultado dofatorial(1)que é1, ou seja2 * 1e retorna o valor2. -
Volta para o método
fatorial(3)na linha 26 e faz a multiplicação dexque vale3pelo resultado dofatorial(2)que é2, ou seja3 * 2e retorna o valor6. -
Volta para o método que chamou o
fatorial(3), neste caso o métodomain()na linha 7, guarda o resultado dofatorial(3)que é6, dentro da variávelresp, e imprime o resultado da variávelrespna linha 8.
Conteúdos relacionados
- Implementando métodos recursivos no Java
- Implementando Fibonacci de modo recursivo no Java
- Implementando uma busca binária no Java
- Entendendo como funciona a implementaçãdo do Bubble Sort