Buscar

Pratica10-Recursividade

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

Algoritmos e Técnicas de 
Programação
Prática – Recursividade
Recursividade - Introdução
� Um algoritmo “A” é denominado recursivo quando 
chama (invoca) a si mesmo de forma:
� direta: “A” chama “A” dentro dele mesmo, de forma visível 
ou explícita.
� indireta: “A” invoca outro(s) algoritmo(s) que, em algum 
momento, chama(m) “A”.
� Um algoritmo recursivo tem duas partes essenciais:
� uma ou mais chamadas a si mesmo, direta(s) ou 
indireta(s), sem a(s) qual(ais) não seria recursivo;
� uma ou mais condições de parada, para garantir que a 
computação seja finita!
Problema 1
� Implementar dentro de um programa em C uma 
função recursiva para calcular o Máximo Divisor 
Comum (MDC) entre dois inteiros positivos, a partir 
da definição recursiva do algoritmo de Euclides:
se 0
MDC( , ) MDC( , mod ) se
MDC( , mod ) se
a b
a b b a b a b
a b a b a
=

= >
 >
Solução 1a – Pseudocódigo
função MDC(a, b : inteiro) : inteiro
início
se b = 0 então
retorne a
senão
se a > b então
retorne MDC(b, a mod b)
senão
retorne MDC(a, b mod a)
fimse
fimse
fim
Solução 1b (Iterativa)-Pseudocódigo
funcao MDC_NR(a, b: inteiro): inteiro
declare
r: inteiro
inicio
r ← a mod b
enquanto r > 0 faça
a ← b
b ← r
r ← a mod b
fimenquanto
retorne b
fim
Comentários sobre as soluções 1a e 1b
� Observe que, dada a definição recursiva, a 
implementação recursiva (1a) é imediata, ou 
seja, quase uma transcrição. Além disso, o 
código é compacto e claro.
� Chegar à conclusão de que a solução “1b”
faz o mesmo que “1a” não é tão imediato, 
requer uma análise mais minuciosa.
Problema 2 – Torre de Hanoi
� O problema da torre de Hanoi consiste em mover 
N discos (torre) de um pino A para um pino C, 
usando um pino B como auxiliar e duas regras:
� somente um disco pode ser movido de cada vez;
� um disco maior não pode ficar sobre outro menor.
� Uma elegante solução recursiva consiste em:
� Mover a torre com N-1 discos de A para B;
� Mover o disco de A para C;
� Mover a torre com N-1 discos de B para C.
Problema 2 - Visualização do Problema e 
sua Solução
Torre original em A 1) Torre com N-1 discos de A para B
2) Disco de A para C 3) Torre com N-1 discos de B para C
Solução 2 – Pseudocódigo
procedimento MoveTorre(N : inteiro; 
Orig, Dest, Aux : caractere) 
início
se N = 1 então
Escreva(“Movimento:”, Orig, “ -> ”, Dest) 
senão
MoveTorre(N - 1, Orig, Aux, Dest) 
Escreva(“Movimento:”, Orig, “ -> ”, Dest) 
MoveTorre(N - 1, Aux, Dest, Orig) 
fimse
fim

Outros materiais