Post on 06-Jul-2018
8/17/2019 Estruturas de Dados - Recursividade e Arvores
1/21
Recursividade Recursividade é um princípio que permite obter a
solução de um problema P, a partir das soluções desubproblemas de P, que são similares ao próprio P.
Resolução de um problema decompondo-o em
subproblemas cada vez mais simples, até quetenhamos apenas subproblemas triviais.
Os subproblemas triviais são resolvidos diretamente
sem a necessidade de decomposições, e osresultados obtidos são usados para compor asolução do problema original.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
2/21
RecursividadeR$ 1.500,00
R$ 700,00 R$ 700,00
R$ 300,00R$ 300,00 R$ 300,00R$ 300,00
R$ 100,00 R$ 100,00 R$ 100,00 R$ 100,00
R$ 100,00 R$ 100,00
R$ 100,00 R$ 100,00
8/17/2019 Estruturas de Dados - Recursividade e Arvores
3/21
Recursividade Algorítmos recursivos Para resolver um problema P, um algoritmo recursivo
deve ser capaz de classificar cada uma de suasinstâncias como trivial ou não trivial.
Uma instância trivial deve ser resolvida diretamente, jáque não pode ser reduzida à outra mais simples
8/17/2019 Estruturas de Dados - Recursividade e Arvores
4/21
Recursividade Algorítmos recursivos
Uma instância não trivial pode ser resolvida,recursivamente, do seguinte modo: Reduzimos a instância P(I) à outra mais simples P(I’) e, em
seguida usamos a solução de P(I’) para compor a solução
de P(I). Um algoritmo recursivo é composto de duas partes
importantes:
Base de recursão, que resolve instâncias triviais diretamente Passo de recursão, que resolve instâncias não triviais
recursivamente.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
5/21
Recursividade
Instância original de P(I)
Instância mais simples P(I’) Solução de P(I’)
Solução de P(I)
Reduz
Obtém
Usa
Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).
8/17/2019 Estruturas de Dados - Recursividade e Arvores
6/21
Recursividade Implementação de Recursão
Cálculo do Fatorial Base de recursão: se n=0, a instância n! é trivial e sua
solução é 1.
Passo de recursão: se n>0, a instância n! é não trivial e suasolução é n*(n – 1)!
8/17/2019 Estruturas de Dados - Recursividade e Arvores
7/21
Recursividade
4!
3! 6
24
Reduz
Obtém
*4
Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).
n!
(n-1)! (n-1)!
n * (n-1)!
Reduz
Obtém
*n
8/17/2019 Estruturas de Dados - Recursividade e Arvores
8/21
Recursividade Simulação – Cálculo do Fatorial
A cada chamada recursiva, uma instância não trivial éreduzida à outra mais simples e uma operação demultiplicação fica pendente, aguardando a propagação dasolução dessa instância mais simples.
É como se a execução ficasse congelada, aguardando otérmino da chamada recursiva para continuar executando.
Fat(4)
4 * fat(3) = 4 * 3 * fat(2) = 4 * 3 * 2 * fat(1) = 4 * 3 * 2 * 1 * fat(0) = 4 * 3 * 2 * 1 * 1 = 24
8/17/2019 Estruturas de Dados - Recursividade e Arvores
9/21
Recursividade Cálculo do Fatorial
Base de recursão: se n=0, a instância n! é trivial e suasolução é 1.
Passo de recursão: se n>0, a instância n! é não trivial e suasolução é n*(n – 1)!
public static int fat( int n)
{
int fatorial;
if (n==0)
fatorial = 1;else
fatorial = n * fat(n-1);
return fatorial;
}
8/17/2019 Estruturas de Dados - Recursividade e Arvores
10/21
Recursividade Implementação de Recursão
Cálculo de Potência Base de recursão: se n=0, a instância Xn é trivial e sua
solução é 1.
Passo de recursão: se n>0, a instância Xn
é não trivial e suasolução é X * Xn - 1
8/17/2019 Estruturas de Dados - Recursividade e Arvores
11/21
Recursividade
23
22 4
8
Reduz
Obtém
*2
Reduzimos a instância P(I) à outra mais simples P(I’) e, em seguida usamos asolução de P(I’) para compor a solução de P(I).
nx
nx - 1 nx - 1
n * nx - 1
Reduz
Obtém
*n
8/17/2019 Estruturas de Dados - Recursividade e Arvores
12/21
Recursividade Simulação – Cálculo de Potencia
A cada chamada recursiva, uma instância não trivial éreduzida à outra mais simples e uma operação demultiplicação fica pendente, aguardando a propagação dasolução dessa instância mais simples.
É como se a execução ficasse congelada, aguardando otérmino da chamada recursiva para continuar executando.
pot(2,3) 2 * pot(2,2) = 2 * 2 * pot(2,1) = 2 * 2 * 2 * pot(2,0) = 2 * 2 * 2 * 1 = 8
8/17/2019 Estruturas de Dados - Recursividade e Arvores
13/21
Recursividade Cálculo do Fatorial
Base de recursão: se n=0, a instância Xn é trivial e suasolução é 1.
Passo de recursão: se n>0, a instância Xn é não trivial e suasolução é X * Xn - 1
public static int pot(int bas,int exp){
int potencia;if (exp==0)
potencia = 1;else
potencia = bas * pot(bas,exp-1);return potencia;
}
8/17/2019 Estruturas de Dados - Recursividade e Arvores
14/21
Recursividade Exercício
Crie uma função recursiva para calcular o terminal de umnúmero N, definido da seguinte maneira: 0 se N = 0;
N+...+3+2+1 se N > 0;
8/17/2019 Estruturas de Dados - Recursividade e Arvores
15/21
Recursividade Exercício
Usando apenas subtração, crie uma função recursiva paracalcular o resto da divisão de um número M por outronúmero N.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
16/21
Árvores Uma árvore A é uma estrutura hierárquica composta por
n>=0 nós. Se n=0, dizemos que a árvore é vazia; casocontrário: Existe um nó especial em A denominado raiz;
Os demais nós de A são organizados em A1, A2,...,Ak estruturas
de árvores disjuntas, denominadas subárvores de A. O número de filhos de um nó denomina-se grau, e um nó de
grau 0 denomina-se folha.
O grau de uma árvore A é o máximo entre os graus deseus nós.
A altura de uma árvore é o máximo dos níveis de seus nós.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
17/21
Árvores Binárias Uma árvore binária é uma árvore de grau 2, isto é,
uma árvore em que nenhum nó tem mais de 2 filhos. Percursos em Árvores Binárias: Um percurso é uma forma sistemática de visitar cada nó de
uma árvore exatamente uma vez.
Podemos percorrer uma árvore em profundidade ou emlargura.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
18/21
Árvores Binárias Percursos em profundidade:
Em-ordem: visita recursivamente a subárvore da esquerda,depois visita a raiz da árvore e, finalmente, visita asubárvore da direita;
Pré-ordem: visita primeiro a raiz, depois visita
recursivamente suas subárvores esquerda e direita, nessaordem;
Pós-ordem: visita recursivamente as subárvores esquerda e
direita, nessa ordem, e depois visita a raiz da árvore.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
19/21
Árvores Binárias Percurso em largura:
O percurso em largura, também denominado percurso em-nível, visita os nós de uma árvore por nível, de cima parabaixo e da esquerda para a direita.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
20/21
Árvores de Busca Binária Seja A uma árvore binária cuja raiz armazena um item r.
Dizemos que A é uma árvore de busca binária, ouordenada, se e somente se: Todo item armazenado na subárvore esquerda de A é menor que
r.
Todo item armazenado na subárvore direita de A é maior ouigual a r.
Cada subárvore de A também é uma árvore de busca binária.
Uma consequência importante da propriedade de buscabinária é que a projeção de uma árvore de busca bináriaproduz uma sequência ordenada com todos os seus itens.
8/17/2019 Estruturas de Dados - Recursividade e Arvores
21/21
Árvores de Busca Binária5
3
1 4
7
69
0 2 8