aula14 (recursao).ppt - ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · title:...
TRANSCRIPT
![Page 1: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/1.jpg)
Estruturas de DadosAula 14: Recursão
19/05/2011
![Page 2: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/2.jpg)
Fontes Bibliográficas
• Livros:– Projeto de Algoritmos (Nivio Ziviani): Capítulo 2;– Estruturas de Dados e seus Algoritmos
(Szwarefiter, et. al): Capítulo 1;– Algorithms in C (Sedgewick): Capítulo 5;
• Slides baseados nas aulas de Sedgewick • Slides baseados nas aulas de Sedgewick (http://www.cs.princeton.edu/~rs/)
![Page 3: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/3.jpg)
Introdução
• O que é recursão?– É um método de programação no qual uma
função pode chamar a si mesma– O termo é usado de maneira mais geral para
descrever o processo de repetição de um objeto de um jeito similar ao que já fora mostrado
• Por que precisamos aprender recursão?• Por que precisamos aprender recursão?– Paradigma de programação poderoso– Nova maneira de pensar
• Muitas estruturas têm natureza recursiva:– Estruturas encadeadas– Fatorial, máximo divisor comum– Uma pasta que contém outras pastas e arquivos
![Page 4: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/4.jpg)
Introdução (cont.)
Uma forma visual de recursão
conhecida como efeito Droste
![Page 5: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/5.jpg)
Introdução (cont.)
![Page 6: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/6.jpg)
Máximo Divisor Comum
• mdc (p, q): encontre o maior divisor comum entre p e q;
• Ex.: mdc (4032, 1272) = 24– 4032 = 26 x 32 x 71
– 1272 = 23 x 31 x 531
• Uso de mdc:– Simplificação de frações: 1272/4032 = 53/168– Importante em mecanismos de criptografia
![Page 7: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/7.jpg)
Máximo Divisor Comum (2)
• Algoritmo de Euclides
• mdc (p, q) = p se q =0
mdc (q, p%q) caso contrario
- caso base
- passo de redução,
converge para o caso
base
• mdc (4032, 1272) = mdc (1272, 216)mdc (216, 192)mdc (192, 24)mdc (24, 0)24
- 4032 / 1272 = 3 x 1272
+ 216
![Page 8: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/8.jpg)
Máximo Divisor Comum (3)
• mdc (p, q) =p se q =0
mdc (q, p%q) caso contrario
- caso base
- passo de redução,
converge para o caso
base
p = 8x
q = 3x mdcmdc (8x, 3x)
mdc (3x, 2x)
mdc (2x, x)
mdc (x,0)
mdc (p, q) = x
![Page 9: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/9.jpg)
Máximo Divisor Comum (4)
• mdc (p, q) =
• Implementação em C
p se q =0
mdc (q, p%q) caso contrario
- caso base
- passo de redução,
converge para o caso
base
int mdc (int p, int q)
{
if (q == 0) return p; //caso base
else return mdc(q, p % q); //passo de redução
}
![Page 10: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/10.jpg)
Memória
HeapPointer
Início da Área
StackPointerInicio da Pilha
Topo da Memória
aabb
10010101...10010101...
“constante”“constante”
Sist.OperacionalSist.Operacional
Início da ÁreaAlocável
Base da Memória
Variáveis estáticas
Código objeto
Constantes
![Page 11: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/11.jpg)
StackPointerInicio da Pilha
Topo da Memória• Programa:
int mdc (int p, int q)
{
if (q == 0) return p; //caso base
else return mdc(q, p % q); //passo de redução
10010101...10010101...
Sist.OperacionalSist.Operacional
Base da Memória
Variáveis estáticas
Código objeto
Constantes
//passo de redução
}
main ()
{
int n = mdc(6, 4);
}
![Page 12: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/12.jpg)
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
![Page 13: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/13.jpg)
StackPointerTopo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
&mdc- #2p (4)q (2)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
![Page 14: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/14.jpg)
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
&mdc- #2p (4)q (2)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
&mdc- #2p (2)q (0)
Sist.OperacionalSist.Operacional
10010101...10010101...
Topo da Pilha
Base da Memória
Variáveis estáticas
Código objeto
Constantes
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
![Page 15: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/15.jpg)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
&mdc- #2p (4)q (2)
&mdc- #2p (2)q (0)
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
Sist.OperacionalSist.Operacional
10010101...10010101...
Topo da Pilha
Base da Memória
Variáveis estáticas
Código objeto
Constantes
![Page 16: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/16.jpg)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
&mdc- #2p (4)q (2)
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
![Page 17: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/17.jpg)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
&mdc- #2p (4)q (2)
vale 2!else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
vale 2!
![Page 18: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/18.jpg)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
![Page 19: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/19.jpg)
StackPointer
Topo da Pilha
Topo da Memória
n
&main- #1p (6)q (4)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q); vale 2!
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
vale 2!
![Page 20: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/20.jpg)
•• Programa:Programa:
int mdc (int p, int q)
{
if (q == 0) return p;
else return mdc(q, p % q);
StackPointerTopo da Pilha
Topo da Memória
n (2)
else return mdc(q, p % q);
}
main ()
{
int n = mdc(6, 4);
}
Sist.OperacionalSist.Operacional
10010101...10010101...
Base da Memória
Variáveis estáticas
Código objeto
Constantes
vale 2!
![Page 21: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/21.jpg)
Gráficos Recursivos
![Page 22: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/22.jpg)
Árvore H
![Page 23: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/23.jpg)
Árvore H• Árvore-H de ordem n
– Desenha uma letra H– Recursivamente desenha 4 árvores-H da ordem de n-1 (e metade
do tamanho), cada árvore conectada em um “topo” (tip).
ordem 1 ordem 2 ordem 3
![Page 24: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/24.jpg)
Implementação Recursiva da Árvore H (em C)void draw(int n, double tam, double x, double y) {
if (n == 0) return; //condicao de parada
double x0 = x - tam/2; double x1 = x + tam/2;
double y0 = y - tam/2; double y1 = y + tam/2;
DesenhaLinha(x0, y, x1, y);
DesenhaLinha(x0, y0, x0, y1);
DesenhaLinha(x1, y0, x1, y1);
draw(n-1, tam/2, x0, y0);
draw(n-1, tam/2, x0, y1);
desenha o H
centralizado em (x, y)
recursivamente
desenha 4 Hs com a draw(n-1, tam/2, x1, y0);
draw(n-1, tam/2, x1, y1);
}
desenha 4 Hs com a
metade do tamanho
![Page 25: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/25.jpg)
Animação Árvore H
![Page 26: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/26.jpg)
Torres de Hanoi
![Page 27: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/27.jpg)
Objetivo• Mover os discos do pino mais a esquerda para o pino da direita
– Somente um disco por vez pode ser movido;– Um disco pode ser colocado num pino vazio ou sobre um disco de
tamanho maior;
Início Final
• Torres de Hanoi: animação
![Page 28: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/28.jpg)
Torres de Hanoi: Solução Recursiva
![Page 29: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/29.jpg)
Lenda das Torres de Hanoi
• Mundo vai acabar quando um grupo de monges conseguirem mover 64 discos de ouro em 3 pinos de diamante.
• Algoritmos de computação irão ajudar a resolver o problema?o problema?
![Page 30: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/30.jpg)
Torres de Hanoi: Implementação Recursiva
void moves (int N, int left){
if (N == 0) return; // se não houver discos, retorna
moves(N-1, !left);if (left)
printf(“%d left”, N);printf(“%d left”, N);else
printf(“%d right”, N);moves (N-1, !left);
}
![Page 31: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/31.jpg)
Torres de Hanoi: Implementação Recursiva(para 3 discos) moves (3, left)
moves (2, right)moves (1, left)
“1 left”“2 right”moves (1, left)moves (1, left)
“1 left”“3 left”moves (2, right)
moves (1, left)“1 left”
“2 right”moves (1, left)
“1 left”
![Page 32: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/32.jpg)
Torres de Hanoi: árvore de recursão
![Page 33: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/33.jpg)
Torres de Hanoi: Propriedades da solução
• Leva 2n – 1 “moves” para resolver o problema com n discos;
• O algoritmo revela um fato:– São necessários 585 milhões de anos para n=64
(considerando que cada movimento de disco leve 1 segundo, os monges não cometam erros e que os monges saibam exatamente para onde os monges saibam exatamente para onde movimentar o disco, sem pestanejar)
• Outro fato: qualquer solução possível para as torres de Hanoi levará no mínimo esse tempo!
![Page 34: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/34.jpg)
Dividir para Conquistar
• Consiste em dividir o problema em problemas menores
• Problemas menores são resolvidos recursivamente usando o mesmo método
• Resultados são combinados para resolver problema originalproblema original
• Vários algoritmos são resolvidos com essa técnica (e.x., quicksort, mergesort)
![Page 35: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/35.jpg)
Pontos Negativos da Recursão
• Considere a sequência de Fibonacci: 0,1,1,2,3,5,8,13,21,34...
![Page 36: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/36.jpg)
Sequência de Fibonacci
![Page 37: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/37.jpg)
Sequência de Fibonacci e a Natureza
![Page 38: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/38.jpg)
Sequência de Fibonacci e a Natureza
![Page 39: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/39.jpg)
Solução Recursiva?
long F(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return F(n-1) + F(n-2);
}
-> Código muito ineficiente!
-> Leva muito tempo para computar F(50)!
![Page 40: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/40.jpg)
Problema com Recursão
F(50) é chamado uma vez
F(49) é chamado uma vez
F(48) é chamado 2 vezes
F(47) é chamado 3 vezes
F(46) é chamado 5 vezes
F(45) é chamado 8 vezes
• Pode facilmente levar a soluções incrivelmente
ineficientes!
...
F(1) é chamado
12,586,269,025 vezes
![Page 41: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/41.jpg)
Resumindo
• Como escrever programas recursivos simples?– Condição de parada, passo da recursão– Use desenhos
• Dividir para conquistar– Técnica elegante de resolver problemas (não – Técnica elegante de resolver problemas (não
somente recursivos)
![Page 42: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/42.jpg)
Implementação Recursiva de Listas
• Considere a lista sem sentinela e sem cabeçalho• Definição recursiva:
– Uma lista é:• Uma lista vazia; ou • Um elemento seguido de uma (sub)-lista
![Page 43: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/43.jpg)
Implementação Recursiva de Listas
• Exemplo – função imprime– Se a lista for vazia, não imprime nada– Caso contrário:
• Imprime o conteúdo da primeira célula (l->Item ou l->Item.campo)
• Imprime a sub-lista dada por l->Prox, chamando a função recursivamente função recursivamente
![Page 44: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/44.jpg)
Implementação Recursiva de Listas
/* Função imprime recursiva */
void lst_imprime_rec (TipoLista* l)
{
if ( !lst_vazia(l)) {
/* imprime primeiro elemento: lista de inteiros */inteiros */
printf(“Item: %d\n”,l->Item);
/* imprime sub-lista */
lst_imprime_rec(l->Prox);
}
}
![Page 45: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/45.jpg)
Implementação Recursiva de Listas
• Exemplo – função retira– retire o elemento, se ele for o primeiro da lista
(ou da sub-lista)– caso contrário, chame a função recursivamente
para retirar o elemento da sub-lista
![Page 46: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/46.jpg)
Implementação Recursiva de Listas
/* Função retira recursiva */
TipoLista* lst_retira_rec (TipoLista* l, int v){
if (!lst_vazia(l)) {
/* verifica se elemento a ser retirado é o primeiro */
if (l->Item == v) {
TipoLista* t = l; /* temporário para liberar */
l = l->Prox;
free(t);free(t);
}
else {
/* retira de sub-lista */
l->Prox = lst_retira_rec(l->Prox,v);
}
}return l;
}
![Page 47: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/47.jpg)
Implementação Recursiva de Listas
• Exemplo – função que testa igualdade entre duas listas
int lst_igual (TipoLista* l1, TipoLista* l2)
– se as duas listas dadas são vazias, são iguais– se as duas listas dadas são vazias, são iguais– se não forem ambas vazias, mas uma delas é
vazia, são diferentes– se ambas não forem vazias, teste:
• se informações associadas aos primeiros nós são iguais • se as sub-listas são iguais
![Page 48: Aula14 (recursao).ppt - Ufespdcosta/ensino/2011-2-estruturas-de... · 2011. 5. 24. · Title: Microsoft PowerPoint - Aula14 (recursao).ppt [Compatibility Mode] Author: pdcosta Created](https://reader035.vdocuments.net/reader035/viewer/2022081601/611b87160f8cc24f1219f415/html5/thumbnails/48.jpg)
Implementação Recursiva de Listas
int lst_igual (TipoLista* l1, TipoLista* l2){
if (l1 == NULL && l2 == NULL)
return 1;
else if (l1 == NULL || l2 == NULL)
return 0;return 0;
else
return l1->Item == l2->Item && lst_igual(l1->Prox, l2->Prox);
}