Você está na página 1de 21

Recursividade

Recursividade um princpio que permite obter a


soluo de um problema P, a partir das solues de
subproblemas de P, que so similares ao prprio P.
Resoluo de um problema decompondo-o em
subproblemas cada vez mais simples, at que
tenhamos apenas subproblemas triviais.
Os subproblemas triviais so resolvidos diretamente
sem a necessidade de decomposies, e os
resultados obtidos so usados para compor a
soluo do problema original.

Recursividade
R$ 1.500,00

R$ 700,00

R$ 300,00

R$ 100,00

R$ 100,00

R$ 700,00

R$ 300,00

R$ 100,00

R$ 300,00

R$ 100,00

R$ 100,00

R$ 300,00

R$ 100,00

R$ 100,00

R$ 100,00

Recursividade


Algortmos recursivos
 Para

resolver um problema P, um algoritmo recursivo


deve ser capaz de classificar cada uma de suas
instncias como trivial ou no trivial.
 Uma instncia trivial deve ser resolvida diretamente, j
que no pode ser reduzida outra mais simples

Recursividade


Algortmos recursivos
 Uma

instncia no trivial pode


recursivamente, do seguinte modo:

ser

resolvida,

 Reduzimos

a instncia P(I) outra mais simples P(I) e, em


seguida usamos a soluo de P(I) para compor a soluo
de P(I).

 Um

algoritmo recursivo composto de duas partes


importantes:
 Base

de recurso, que resolve instncias triviais diretamente


 Passo de recurso, que resolve instncias no triviais
recursivamente.

Recursividade
Reduzimos a instncia P(I) outra mais simples P(I) e, em seguida usamos a
soluo de P(I) para compor a soluo de P(I).
Instncia original de P(I)

Soluo de P(I)

Reduz

Usa

Instncia mais simples P(I)

Soluo de P(I)
Obtm

Recursividade


Implementao de Recurso
 Clculo
 Base

do Fatorial

de recurso: se n=0, a instncia n! trivial e sua


soluo 1.
 Passo de recurso: se n>0, a instncia n! no trivial e sua
soluo n*(n 1)!

Recursividade
Reduzimos a instncia P(I) outra mais simples P(I) e, em seguida usamos a
soluo de P(I) para compor a soluo de P(I).

24

4!

Reduz

*4

3!
Obtm

n * (n-1)!

n!

Reduz

*n

(n-1)!

(n-1)!
Obtm

Recursividade


Simulao Clculo do Fatorial

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

A cada chamada recursiva, uma instncia no trivial


reduzida outra mais simples e uma operao de
multiplicao fica pendente, aguardando a propagao da
soluo dessa instncia mais simples.

como se a execuo ficasse congelada, aguardando o


trmino da chamada recursiva para continuar executando.

Recursividade
 Clculo

do Fatorial

 Base

de recurso: se n=0, a instncia n! trivial e sua


soluo 1.
 Passo de recurso: se n>0, a instncia n! no trivial e sua
soluo n*(n 1)!
public static int fat(int n)
{
int fatorial;
if (n==0)
fatorial = 1;
else
fatorial = n * fat(n-1);
return fatorial;
}

Recursividade


Implementao de Recurso
 Clculo

de Potncia

de recurso: se n=0, a instncia Xn trivial e sua


soluo 1.
 Passo de recurso: se n>0, a instncia Xn no trivial e sua
soluo X * Xn - 1
 Base

Recursividade
Reduzimos a instncia P(I) outra mais simples P(I) e, em seguida usamos a
soluo de P(I) para compor a soluo de P(I).

23

Reduz

*2

22

4
Obtm

n * nx - 1

nx

Reduz

*n

nx - 1

nx - 1
Obtm

Recursividade


Simulao Clculo de Potencia

pot(2,3)

2 * pot(2,2) = 2 * 2 * pot(2,1) = 2 * 2 * 2 * pot(2,0) = 2 * 2 * 2 * 1 = 8

A cada chamada recursiva, uma instncia no trivial


reduzida outra mais simples e uma operao de
multiplicao fica pendente, aguardando a propagao da
soluo dessa instncia mais simples.

como se a execuo ficasse congelada, aguardando o


trmino da chamada recursiva para continuar executando.

Recursividade
 Clculo

do Fatorial

de recurso: se n=0, a instncia Xn trivial e sua


soluo 1.
 Passo de recurso: se n>0, a instncia Xn no trivial e sua
soluo X * Xn - 1
 Base

public static int pot(int bas,int exp)


{
int potencia;
if (exp==0)
potencia = 1;
else
potencia = bas * pot(bas,exp-1);
return potencia;
}

Recursividade
 Exerccio
 Crie

uma funo recursiva para calcular o terminal de um


nmero N, definido da seguinte maneira:



0 se N = 0;
N+...+3+2+1 se N > 0;

Recursividade
 Exerccio
 Usando

apenas subtrao, crie uma funo recursiva para


calcular o resto da diviso de um nmero M por outro
nmero N.

rvores


Uma rvore A uma estrutura hierrquica composta por


n>=0 ns. Se n=0, dizemos que a rvore vazia; caso
contrrio:
Existe um n especial em A denominado raiz;
 Os demais ns de A so organizados em A1, A2,...,Ak estruturas
de rvores disjuntas, denominadas subrvores de A.


O nmero de filhos de um n denomina-se grau, e um n de


grau 0 denomina-se folha.
 O grau de uma rvore A o mximo entre os graus de
seus ns.
 A altura de uma rvore o mximo dos nveis de seus ns.


rvores Binrias
 Uma

rvore binria uma rvore de grau 2, isto ,


uma rvore em que nenhum n tem mais de 2 filhos.
 Percursos em rvores Binrias:
 Um

percurso uma forma sistemtica de visitar cada n de


uma rvore exatamente uma vez.
 Podemos percorrer uma rvore em profundidade ou em
largura.

rvores Binrias
 Percursos

em profundidade:

 Em-ordem:

visita recursivamente a subrvore da esquerda,


depois visita a raiz da rvore e, finalmente, visita a
subrvore da direita;
 Pr-ordem:
visita primeiro a raiz, depois visita
recursivamente suas subrvores esquerda e direita, nessa
ordem;
 Ps-ordem: visita recursivamente as subrvores esquerda e
direita, nessa ordem, e depois visita a raiz da rvore.

rvores Binrias
 Percurso
O

em largura:

percurso em largura, tambm denominado percurso emnvel, visita os ns de uma rvore por nvel, de cima para
baixo e da esquerda para a direita.

rvores de Busca Binria




Seja A uma rvore binria cuja raiz armazena um item r.


Dizemos que A uma rvore de busca binria, ou
ordenada, se e somente se:
Todo item armazenado na subrvore esquerda de A menor que
r.
 Todo item armazenado na subrvore direita de A maior ou
igual a r.
 Cada subrvore de A tambm uma rvore de busca binria.


Uma consequncia importante da propriedade de busca


binria que a projeo de uma rvore de busca binria
produz uma sequncia ordenada com todos os seus itens.

rvores de Busca Binria


5
3
4

1
0

9
8