Você está na página 1de 5

Abordando a Recursividade em comparao com a

Iteratividade
Felipe Ferreira Dantas, Kenneth Felipe Reis, Victor Hugo Gomes
UnipeTech Centro Universitrio de Joo Pessoa (Unip)
Joo Pessoa, Paraba Brasil
felipeffd@gmail.com,victor_hugo_gomes@gmail.com,fellipe.reis@gmail.com
Resumo. Este trabalho aborda em linguagem simples e em singelos exemplos,
a definio da tcnica de programao chamada Recurso,
concomitantemente com a definio da recursividade em linha gerais. O
objetivo desenvolve-se sobre uma comparao da tcnica recursiva com a
tcnica iterativa. Este trabalho pode servir de fonte de informao inicial
para estudantes de Cincia da Computao, ou desenvolvedores de software
em geral, sobre aspectos da recurso.
Abstract. This paper discusses in easy language and simple examples defining
the programming method called recursion, concomitantly with the definition
of general recursivity. The goal is to develop a comparison with the recursive
and the iterative method. This work can be used as a source of initial
information for students of Computer Science or Software Developers in
general aspects of recursion.
1. Introduo
Recurso, segundo o Dicionrio Michaelis (2012), o ato de recorrer. E recorrer
significa trilhar determinado caminho j trilhado. Na Cincia da Computao,
chamamos de algoritmos recursivos, aqueles que tem incluso uma reproduo de si
mesmo. Em linguagens de programao, sub-rotinas em geral (sejam elas chamadas de
funes, mtodos, ou procedimentos), so chamadas recursivas quando fazem chamada
a si mesmas em seu conjunto de etapas. A recursividade uma tcnica usada na criao
de algoritmos e, portanto, no desenvolvimento de programas em todas as linguagens.
2. Recursividade como tcnica de programao
Frequentemente, pessoas comuns diante de problemas de qualquer natureza
abordam o desafio de resolv-lo atuando em parties menores do mesmo problema.
Problemas que incluem muitas etapas algortmicas possivelmente no podero ter suas
solues executadas de uma vez por uma mesma unidade executora. O processo de
executar passos distintos da soluo de um problema tem duas abordagens: A Iterativa e
a Recursiva.
2.1. Iterao x Recurso
O modelo de soluo iterativa sempre faz uso das estruturas de repetio
fornecidas pela linguagem de programao. Essas estruturas repetem um conjunto de
procedimentos at que determinada condio de controle de parada seja alcanada. J o
modelo de soluo recursiva aproveita a possibilidade da criao de sub-rotinas. As sub-
rotinas recursivas devem conter uma verificao da condio de parada, que se no for
alcanada, acarretar repetio da sub-rotina (chamada a si mesma). Em um processo
iterativo, cada execuo da estrutura de repetio alcana uma parte da soluo do
problema, que ser aproveitada na prxima etapa at que a condio de controle seja
satisfeita. As etapas mencionadas sero chamadas de loop. A partir do primeiro loop,
nenhum outro comea a execuo antes que o anterior tenha finalizado. Assim, os loops
sero executados em sequncia, sem interseces. A abordagem recursiva pode ser
descrita tambm como uma sequncia de etapas que reproduzem seus resultados outra
at que o final seja alcanado. No entanto, a execuo das etapas acontece internamente
etapa anterior, de forma que a finalizao de uma etapa acarreta na continuidade da
execuo da etapa que a antecedeu. A figura abaixo uma ilustrao ingnua do que
seria a disposio geomtrica de loops e sub-rotinas em processos iterativos e recursivos
respectivamente.
Figura 1: loops x sub-rotinas recursivas
Qualquer problema que tem uma soluo algortmica pode ser resolvido por uso
da iterao, ou da recursividade [Brookshear 2008]. As vantagens e desvantagens de
cada tcnica podem variar de acordo com as peculiaridades do problema, mas dois
aspectos se sobressaem devidos s circunstncias com que essas tcnicas operam. Como
os loops so dispostos sem intercalao, o compartilhamento de memria facilmente
implementvel, de forma que uma mesma varivel que represente determinado aspecto
do problema pode ser usada em cada iterao. Com as sub-rotinas recursivas, essa
2
situao no figura. O fato de elas executarem em concomitncia, uma internamente
anterior, acarreta em cada uma tendo que criar uma nova varivel para representar o
mesmo aspecto do problema. O consumo de memria ser maior nas solues
recursivas. A vantagem das operaes recursivas est na legibilidade da implementao.
Consideremos a funo matemtica fatorial e analisemos as funes abaixo escritas na
linguagem C. O propsito de ambas retornar o fatorial de um nmero passado como
parmetro.
Figura 2: Funo Fatorial
A segunda funo apresenta uma soluo recursiva para o desafio. Suas instrues so
precisamente uma representao em linguagem C, da definio matemtica da funo
fatorial. A segunda funo trabalha com iteratividade. Suas instrues no apresentam
claramente o objetivo da funo. Alm disso, recorrem criao de uma varivel
adicional para controle da estrutura de repetio. Esse exemplo ilustra os dois aspectos
considerados anteriormente como efeito comparativo entre as duas abordagens. Apesar
de a funo iterativa criar uma varivel para controle do seu loop, durante toda a sua
execuo apenas duas variveis sero alocadas na memria. J a funo recursiva criar
uma varivel VALOR para cada chamada que fizer de si mesma. Ainda pode ser listada,
como aspecto desvantajoso da recurso, a necessidade de gerenciamento das
invocaes, acarretando processamento extra que refletir no desempenho do programa.
3
3. Outras ilustraes sobre recurso
Alm da funo fatorial, h uma sequncia numrica muito usada para em
trabalhos diversos abordando a recursividade: trata-se da sequncia de Fibonacci. O
matemtico italiano Leonardo Pisa apresentou a seguinte sequncia de nmeros:
(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...)
O primeiro nmero Fibonacci 0 (zero). O segundo 1 (um), e o ensimo
dado pela soma do (n-1)simo com o (n-2)simo termo. Segue abaixo exemplo de
funo escrita em linguagem C, que retorna o valor Fibonacci na posio dada como
parmetro.
Figura 3: Funo Fibonacci
O conjunto numrico mais elementar estudado nas disciplinas Matemticas o
Conjunto dos Nmeros Naturais (N). A definio de N recursiva, e recorre funo
elementar conhecida como sucessor. O conjunto dos nmeros naturais composto pelo
0 (zero) e todo nmero sucessor de um nmero natural.
O efeito Droste o exemplo visual mais frequente de recurso. Ocorre quando
uma figura inclui uma reproduo de si mesma. Seu primeiro uso conhecido foi
publicado em 1904, em um cartaz de uma fbrica de chocolate holandesa, cujo nome
identifica o efeito at hoje.
Figura 4: Efeito Droste
4
Figura 5: "Mulher flagrada ontem lendo jornal de hoje"
Referencias
CARNIELLI, W. e EPSTEIN, R. Computabilidade, Funes Computveis, Lgica, e os
Fundamentos da Matemtica. 2.ed. So Paulo: Unesp, 2008. 415 p.
BROOKSHEAR, J. Glenn. Cincia da Computao: Uma viso abrangente. Trad.
Cheng Mei Lee. 7.ed. Porto Alegre: Bookman, 2005.
TENENBAUM, Aarom M.; LAMGSAM, Y. e AUGENSTEIN, Moshe J. Estruturas de
dados usando C. Trad. Teresa Cristina Flix de Souza. So Paulo: Pearson Makron
Books, 1995.
MICHAELIS. Moderno Dicionrio da Lngua Portuguesa. Disponvel em:
http://michaelis.uol.com.br/moderno/portugues/index.php. Acesso em: 14 nov. 2012.
THYAGO RIBEIRO. Sequncia de Fibonacci. Disponvel em:
http://www.infoescola.com/matematica/sequencia-de-fibonacci. Acesso em 14 de nov.
2012.
DIANA GUERRA. O Efeito Droste. Disponvel em:
http://obviousmag.org/archives/2010/02/o_efeito_droste.html. Acesso em: 16 nov.
2012.
5