Recursividade é a definição de um método que chama a si mesmo.
• Ele tem o poder de substituir um ou mais laços na programação.
• Algoritmos simples recursivos podem ser substituídos facilmente por algoritmos simples iterativos (com laços) .
Existem problemas mais complexos em que a solução é inerente recursiva, como o QuickSort, onde a solução iterativa é bastante difícil de ser encontrada.
• Abaixo, um exemplo de duas funções que calcula o fatorial de um número. A primeira é iterativa e a segunda é recursiva:
Função interativa (em Java):
public int fatorial(int num){
int resultado = 1;
for(int i = 1; i <= num; i++){
resultado = resultado * i;
}
return resultado;
}
Função recursiva (em Java):
public int fatorial(int num){
if(num <= 1){
return 1;
}else{
return num*fatorial(num – 1);
}
}
}
A função fatorial() recursiva funciona da seguinte maneira:
- suponha que é chamado fatorial(4)
- num = 4
- Como 4 é maior que 1, irá para o else. O valor de retorno será 4 * fatorial(4-1)
- Ou seja, há outra chamada da função, só que agora fatorial(3).
- Ele só pode calcular a multiplicação após calcular o fatorial(3)
- Na chamada fatorial(3), será o mesmo processo. Irá retornar 3*fatorial(3-1)
- Na chamada fatorial(2), será o mesmo processo. Irá retornar 2*fatorial(2-1)
- Na chamada fatorial(1), ele entrará no IF, e retornará 1.
- Portanto, pode-se voltar a quem chamou ele, e realizar a multiplicação: 2*fatorial(2-1) → 2*1 → 2
- Portanto, pode-se voltar a quem chamou ele, e realizar a multiplicação: 3*fatorial(3-1) → 3*2 → 6
- Portanto, pode-se voltar a quem chamou ele, e realizar a multiplicação: 4*fatorial(4-1) → 4*6 → 24
- Assim, ele determina a resposta de fatorial(4.
Agradecimento ao professor Herlon Cortez pelo fornecimento do material do post.