Abordando a Recursividade em comparação com a Iteratividade

download Abordando a Recursividade em comparação com a Iteratividade

of 5

description

Este trabalho aborda em linguagem simples e em singelos exemplos, a definição da técnica de programação chamada Recursão, concomitantemente com a definição da recursividade em linha gerais. O objetivo desenvolve-se sobre uma comparação da técnica recursiva com a técnica iterativa. Este trabalho pode servir de fonte de informação inicial para estudantes de Ciência da Computação, ou desenvolvedores de software em geral, sobre aspectos da recursão.

Transcript of Abordando a Recursividade em comparação com a Iteratividade

Instrues aos Autores de Contribuies para o SIBGRAPI

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

[email protected],[email protected],[email protected]

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 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 FatorialA 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. 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

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.

PAGE 2