Algoritmos Recursivos Klauko Mota
Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito poderoso –Define conjuntos infinitos com comandos finitos Vantagens –Redução do tamanho do código fonte –Permite descrever algoritmos de forma mais clara e concisa Desvantagens –Redução do desempenho de execução devido ao tempo para gerenciamento de chamadas –Dificuldades na depuração de programas recursivos, especialmente se a recursão for muito profunda
Implementação da Recursividade Usa-se uma pilha para armazenar os dados usados em cada chamada de um procedimento / função que não terminou Todos os dados não globais são armazenados na pilha, informando o resultado corrente Quando uma ativação anterior prossegue, os dados da pilha são recuperados
Exemplo – Função Fatorial Definição de uma Função Fatorial a)Não Recursiva: –N! = 1, para N=0; –N! = 1 x 2 x 3 x... x N, para N>=1; b)Recursiva: –N! = 1, para N=0; –N! = N x (N – 1), para N>=1;
Implementação de Fatorial Recursivo X Não Recursivo int Fat (int n){ int result ; result :=1; for( i = 2; i <= n; i++) result = result * i; return result; } Implementação não Recursiva int Fat ( int n ){ if n = 0 then return 1; else return n * Fat (n-1); } Implementação Recursiva
Resultado da Implementação Fatorial = 3 * (Fatorial(2)) Fatorial = 4 * (Fatorial(3)) Fatorial = 2 * (Fatorial(1)) Fatorial = 1 * (Fatorial(0)) Fatorial = Fatorial = 2 2 Fatorial = 6 6 Fatorial = 24
Dicas Não se aprende recursividade sem praticar Para montar um algoritmo recursivo –Defina pelo menos um caso básico (condição de terminação); –Quebre o problema em problemas menores, definindo o(s) caso(s) com recursão(ões) –Fazer o teste de finitude, isto é, certificar-se de que as sucessivas chamadas recursivas levam obrigatoriamente, e numa quantidade finita de vezes, ao(s) caso(s) básico(s)
Finalizando Recursividade é um tópico fundamental Algoritmos recursivos aparecem bastante na prática Dividir e conquistar é uma técnica naturalmente recursiva para solução de problemas Mais recursividade no nosso futuro, principalmente na implementação de árvores...