Sie sind auf Seite 1von 16

RECURSIVIDADE

Prof. Cristiane

Recursividade
Uma sub-rotina que chama a si mesma.

Exemplo: int fpotencia(int numero, int potencia) { potencia--; printf("\n-> funcao fpotencia"); return numero*fpotencia(numero,potencia);
}

Condio de Paragem
Como uma funo recursiva pode chamar-se a si mesma infinitamente, essencial que exista uma condio que determine o fim do processo recursivo. Condio -> determina o momento em que a funo dever parar de chamar a si mesma.

Condio de Paragem
int fpotencia(int numero, int potencia)

{ if (potencia<=1) return numero; else { potencia--; printf("\n-> funcao fpotencia");


return numero*fpotencia(numero,potencia);

} }

Implementao
Duas partes fundamentais: O caso elementar ou condio de Paragem: no h necessidade de chamar uma nova instncia da funo Regra Geral: repetio do processo at atingir o ponto de paragem

Como funciona a recursividade


Implementao atravs de pilha Armazenam-se os dados usados na chamada de um procedimento que ainda no terminou de processar.

Como funciona a recursividade


if (potencia<=1) return numero; else { potencia--;
return numero*fpotencia(numero,potencia);

}
3 3* 3* 3* pilha

Como funciona a recursividade


void escreveasterisco(int num) { if (num<=1) printf("*"); else { printf("*"); num--; escreveasterisco(num); } }

Como funciona a recursividade


Na recursidade, a cada chamada, uma nova cpia da funo executada, o que implica que as suas variveis locais so independentes das variveis locais da primeira cpia, e no podem relacionar-se diretamente.

Exemplo
Escrever uma funo recursiva que calcule a soma dos nmeros entre 1 e n.
1

int Soma (int n) 2+ Soma(1) { if (n>1) 3+ Soma(2) return n+Soma(n-1); else 4+ Soma(3) return 1; }
Soma(4)

Vantagens
Simplificao de alguns problemas; Pode-se obter um cdigo mais conciso e eficaz nessas situaes;
Uma soluo recursiva pode, por outro lado, eliminar a necessidade de manter o controle manual sobre uma srie de variveis normalmente associadas aos mtodos alternativos recursividade.

Desvantagens
As funes recursivas so geralmente mais lentas e ocupam mais memria do que as funes iterativas equivalentes.
Um erro de implementao pode levar ao esgotamento dos recursos associados pilha que gere a chamada a funes.

Quando usar
Recursividade: definio mais clara e precisa dos algoritmos quando o problema por natureza recursivo ou utiliza estruturas recursivas como as rvores.

Quando no usar recursividade


Nem sempre usar um caminho recursivo a melhor maneira de resolver um problema. Deve-se considerar o recurso que ser consumido atravs das inmeras chamadas funo.

Quando no usar recursividade


Alguns problemas que so resolvidos por recursividade podem ser implementados usando laos de repetio (while ou for).

Bibliografia
Faculdade de Cincias e Tecnologia da Universidade de Coimbra, ESTRUTURAS DE DADOS E ALGORITMOS, Ficha 3, 2004.
Ziviane, Nivio. Projeto de Algoritmos com implementaes em PASCAL e C. So Paulo: Editora Thomson, 2007. 2 edio.