Você está na página 1de 29

Estrutura de Dados I 1 / 29

Recursão

Professor: Elton Sarmanho1


E-mail: eltonss@ufpa.br
‡°
1 Faculdade de Sistemas de Informação - UFPA/CUTINS

15 de abril de 2022
Estrutura de Dados I 2 / 29

Roteiro

Conceitos Gerais
Objetivos
Definição
Problemas em Recursividade
Trabalho 1 - Recursividade

Recorrências
Conceito geral
Método da Iteração
Árvore de Recursão
Método Master
Estrutura de Dados I 3 / 29
Conceitos Gerais
Objetivos

I Esta aula apresenta conceitos gerais sobre recursividade e sua


potencialidade na resolução de problemas complexos. Ao
final, você deverá compreender os seguintes tópicos:
I Entender o processo de recursão dado “caso base” e “processo
indutivo“
I Abstrair a resolução de problemas usando a recursividade
I Recorrências
I Aplicações Reais
Estrutura de Dados I 4 / 29
Conceitos Gerais
Definição

Na matemática
I Pode ser definida como: o ato de definir um objeto
(geralmente uma função), em termos do próprio objeto .

Na Computação

I um dos passos de um determinado algoritmo envolve a


repetição desse mesmo algoritmo
Estrutura de Dados I 5 / 29
Conceitos Gerais
Definição

Em geral

I Um procedimento que se utiliza da recursão é dito recursivo


I Também é dito recursivo qualquer objeto que seja resultado
de um procedimento recursivo.
I É possı́vel, por meio de recursão, obter um objeto ou
sequências infinitas a partir de um componente finito.
I O conjunto dos números naturais, por exemplo, pode ser
definido formalmente (de maneira resumida), por:
I Seja 0 um número natural. Cada número natural, n + 1, que é
também um número natural.
Estrutura de Dados I 6 / 29
Conceitos Gerais
Definição

Caso Base
I Parte não recursiva, também chamada de âncora, ocorre quando a
resposta para o problema é trivial.

Passo indutivo
I Parte da definição que especifica como cada elemento (solução) é gerado
a partir do precedente.

Exemplo
I A função fatorial positivo n! pode ser definida como, dado um número
inteiro n:
(
1 se n = 0 (caso base)
n! = (1)
n · (n − 1)!, se n > 0 (passo de indução)
Estrutura de Dados I 7 / 29
Conceitos Gerais
Definição

Problemas com estrutura recursiva


I Propriedade: cada instância do problema contém uma
instância menor do mesmo problema.

Resolução de problemas recursivos

I se a instância é pequena, resolva-a diretamente (caso base)


I Caso contrário:
I reduza-a a uma instância menor do mesmo problema,
I aplique o método à instância menor
I volte à instância original.
Estrutura de Dados I 8 / 29
Conceitos Gerais
Definição

Algoritmo recursivo

I O uso da estratégia acima produz um algoritmo recursivo que


é caracterizado por possuir uma chamada a si mesmo
Estrutura de Dados I 9 / 29
Conceitos Gerais
Definição

Regras
Saber quando parar.
I qualquer função recursiva deve verificar se a jornada já terminou (caso
base) antes da nova chamada recursiva.

Decidir como fazer o primeiro passo.


I pensar em como quebrar um problemas em subproblemas que possam ser
resolvidos instantaneamente.

Processo maior deve ser dividido em processos menores


I encontrar uma maneira da função chamar a si mesma (recursivamente),
passando por parâmetro um problema menor resultante da segunda regra.
Estrutura de Dados I 10 / 29
Conceitos Gerais
Definição
Estrutura de Dados I 11 / 29
Conceitos Gerais
Definição

I A forma de um compilador implementar um procedimento


recursivo é por meio de uma pilha.
I Nessa pilha são armazenados os dados usados em cada
chamada de uma função que ainda não terminou de processar
Estrutura de Dados I 12 / 29
Conceitos Gerais
Definição

Algoritmo - Implementação

(
1 se n = 0 (caso base)
n! = (2)
n · (n − 1)!, se n > 0 (passo de indução)
Estrutura de Dados I 13 / 29
Conceitos Gerais
Definição

Algoritmo - Implementação - Exercı́cio

I Uma função que calcule o número de Fibonacci para qualquer


valor de n pode ser construı́da diretamente usando uma
estratégia recursiva:

0
 se n = 0 (caso base)
f (n) = 1 se n = 1 (caso base) (3)

f (n − 1) + f (n − 2), se n > 1 (passo de indução)

Estrutura de Dados I 14 / 29
Conceitos Gerais
Definição

Algoritmo - Implementação - Exercı́cio


Estrutura de Dados I 15 / 29
Conceitos Gerais
Definição

Algoritmo - Implementação - Exercı́cio


0
 se n = 0 (caso base)
f (n) = 1 se n = 1 (caso base) (4)

f (n − 1) + f (n − 2), se n > 1 (passo de indução)

I Os primeiros dez termos da sequência são:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55


Estrutura de Dados I 16 / 29
Conceitos Gerais
Problemas em Recursividade

Quando não usar recursividade

I No exemplo anterior, a primeira implementação seguia a


estrutura natural da sequência de Fibonacci. Mas, para
numeros maiores, nem sempre a estratégia recursiva é a
melhor.
I Os problemas para os quais algoritmos recursivos devem ser
evitados são ditos terem “recursividade de cauda” , e devem
substituı́dos por uma versão iterativa
I nesse tipo de função, a chamada recursiva é a última instrução
a ser executada
I Existem problemas para os quais é difı́cil ou impossı́vel
implementar uma solução não recursiva
Estrutura de Dados I 17 / 29
Conceitos Gerais
Problemas em Recursividade

Recursão indireta

I Funções podem ser recursivas indiretamente, fazendo isto


através de outras funções: assim, F1 pode chamar F2 que
chama F3 e assim por diante, até que F1 seja chamada
novamente.
I Um exemplo é a análise de expressões: um analisador
gramatical para cada tipo de sub-expressão, uma expressão ”3
+ (2 * (4 + 4))ӎ resolvida da seguinte forma:
I A função que processa expressões ”+”chama uma segunda
função que processa expressões ”*”
I A função de multiplicação, por sua vez, chama novamente a
função de soma
Estrutura de Dados I 18 / 29
Conceitos Gerais
Problemas em Recursividade

Recursão Infinita

I Repetição infinita causada por chamada recursiva


I Ocorre quando o caso base não é definido ou algum erro na
definição
I Na prática, o programa não irá executar infinitamente, pois
em algum momento alcançará o limite da pilha , e haverá um
estouro de memória, causando um erro
Estrutura de Dados I 19 / 29
Conceitos Gerais
Trabalho 1 - Recursividade

1. Implemente uma função recursiva para encontrar o menor


elemento em um arranjo.
2. Implemente uma função recursiva que exibe todas as
substrings de uma string. Exemplo: substrings de dog:

d, do, dog , o, og , g

3. Considere a seguinte sequência de elementos g1 ....gn para


dado um valor de k
(
j −1 se 1 ≤ j ≤ k
gj = (5)
gj−1 + gj−2 se j > k

Elaborar um algoritmo para determinar o elemento gn da


sequência, cuja a complexidade seja O(n).
Estrutura de Dados I 20 / 29
Recorrências
Conceito geral

I Uma equação ou inequação que descreve uma função em


termos de seu valor sobre pequenas entradas

T (n) = T (n − 1) + n

I Recorrências aparecem quando um algoritimo contém


chamadas recursivas para ele mesmo
I Temos que saber o tempo de execução desse algoritmo
recursivo.
I Não é calculado da mesma forma que não recursivo.
I É preciso resolver a recorrência
I Encontrar um fórmula explı́cita de uma expressão
I Limitar a recorrência por uma expressão que envolve n
Estrutura de Dados I 21 / 29
Recorrências
Conceito geral

Exemplos de recorrências

I T (n) = T (n − 1) + n θ(n2 )
I Algoritmo recursivo que a cada loop examina a entrada e
elimina um item
I T (n) = T (n/2) + c θ(log n)
I Algoritmo recursivo que divide a entrada em cada passo
I T (n) = T (n/2) + n θ(n)
I Algoritmo recursivo que divide a entrada, mas precisa examinar
cada item na entrada
I T (n) = 2T (n/2) + 1 θ(n)
I Algoritmo recursivo que divide a entrada em duas metades e
executa uma quantidade constante de operações
Estrutura de Dados I 22 / 29
Recorrências
Conceito geral

Busca Binária - Exemplo

I Para um vetor ordenado A, verifique se x está no vetor


A[lo. . . hi]
Estrutura de Dados I 23 / 29
Recorrências
Conceito geral

Busca Binária - Exemplo


Estrutura de Dados I 24 / 29
Recorrências
Método da Iteração

I
Estrutura de Dados I 25 / 29
Recorrências
Árvore de Recursão

I
Estrutura de Dados I 26 / 29
Recorrências
Método Master

I
Estrutura de Dados I 27 / 29
Referências Bibliográficas

Referências I

Lee K.D., Hubbard S. (2015) Trees. In: Data Structures and


Algorithms with Python. Undergraduate Topics in Computer
Science. Springer, Cham. Retrieved from
https://doi.org/10.1007/978-3-319-13072-9_6
Hubbard, J. (2007). Schaum’s Outline sof Data Structures
with Java. Retrieved from http://www.amazon.com/
Schaums-Outline-Data-Structures-Java/dp/
0071476989
Cormen, T. H., Leiserson, C. E., & Stein, R. L. R. E. C.
(2012). Algoritmos: teoria e prática. Retrieved from
https://books.google.com.br/books?id=6iA4LgEACAAJ.
Estrutura de Dados I 28 / 29
Referências Bibliográficas

Referências II

Ascenio, Ana Fernanda Gomes. Estrutura de dados:


Algoritmos, análise da complexidade e implementações em
Java e C++. São Paulo: Pearson Prentice Hall, 2010.
Szwarcfiter, Jayme Luiz. Estruturas de dados e seus algoritmos
/ Jayme Luiz Szwarcfiter, Lilian Markenzon. 3.ed. [Reimpr.]. -
Rio de Janeiro : LTC, 2015.
Capı́tulo 20: Árvores — documentação Aprenda Computação
com Python 3.0 2009.1. Retrieved from
https://mange.ifrn.edu.br/python/aprenda-com-py3/
capitulo_20.html
Estrutura de Dados I 29 / 29

Recursão

Professor: Elton Sarmanho1


E-mail: eltonss@ufpa.br
‡°
1 Faculdade de Sistemas de Informação - UFPA/CUTINS

15 de abril de 2022

Você também pode gostar