Carregar apresentação
A apresentação está carregando. Por favor, espere
1
Marco Antonio Montebello Júnior marco.antonio@aes.edu.br
Recursividade Estrutura de Dados Marco Antonio Montebello Júnior
2
Recursividade Divisão do problema original em pequenas ocorrências
Dividir para conquistar (divide and conquer) A dificuldade não está só no reconhecimento das situações Mas também no equilíbrio entre espaço (memória ocupada) e tempo (tempo de execução) E manter ao mesmo tempo uma boa compreensão da solução do problema Estrutura de Dados
3
Definição Um algoritmo é dito recursivo quando ele chama a si mesmo ou chama uma seqüência de outros algoritmos, e um deles chama novamente o primeiro algoritmo. Estrutura de Dados
4
A função fatorial n! = n x (n-1) x . . .x 1 Uma definição mais precisa
Calculando 4 ! usando a última definição, faríamos: 4! = 4 x 3! = 4 x (3 x 2!) = 4 x (3 x (2 x 1)) = 4 x (3 x (2 x (1 x 0!))). = 4 x (3 x (2 x (1 x 1))) = 4 x (3 x 2) = 4 x 6 = 24 Estrutura de Dados
5
Todo processo recursivo consiste de duas partes
Solução trivial: Dada por definição, obtida sem recursão. Solução geral: Parte do problema que em essência é igual ao problema original, sendo porém menor. Estrutura de Dados
6
Versão recursiva para calcular o fatorial
/* fatorial : versão recursiva Pré-condição : n é um inteiro não negativo Pós-condição : retorna o valor do fatorial de n */ int fatorial(int n) { if(n == 0) return 1; else return n*fatorial(n-1); } Estrutura de Dados
7
Chamando a função: fatorial(3)
Estrutura de Dados
8
Utilizando árvore de recursão
float ex(float a, float b) { if (a >= b) return((a+b)/2); else return(ex(ex(a+2,b-1),ex(a+1, b-2))); } Estrutura de Dados
9
Utilizando árvore de recursão
Estrutura de Dados
10
Rotinas recursivas e pilhas
Controle de chamadas e retornos de rotinas com pilha Quando uma rotina é chamada, empilha-se o endereço de retorno + todas as variáveis locais Quando ocorre o retorno da rotina, as variáveis locais que foram criadas deixam de existir Estrutura de Dados
11
Observações sobre um algoritmo recursivo
Pode ser conciso e elegante Pode ser difícil a compreensão dos detalhes de seu funcionamento computacional Pode requerer um exaustivo acompanhamento do programa O computador pode utilizar pilhas para esse controle A mente humana não é tão boa para tais tarefas Parece ser difícil para uma pessoa guardar uma longa seqüência de resultados e então voltar para terminar um trabalho Estrutura de Dados
12
Para facilitar o acompanhamento, podemos utilizar
Ilustrações especiais Árvores de Recursão Estrutura de Dados
13
Mais um exemplo MDC (máximo divisor comum)
int mdc(int p1, int p2) { if(p2 == 0) mdc = p1; else mdc = mdc(p2, p1%p2); } Estrutura de Dados
14
Alguns resultados mdc (6,12) = 6 mdc (12,20) = 4 mdc (20,24) = 4
Estrutura de Dados
15
Rima infantil norte-americana
As I was going to St. Ives, I met a man with seven wives. Each wife had seven sacks, Each sack had seven cats, Each cat had seven kits, Kits, cats, sacks and wives, How many were there going to St. Ives? Estrutura de Dados
16
Torres de Hanoi “No século XIX, um jogo chamado Torres de Hanoi apareceu na Europa, junto com um material promocional explicando que o jogo representava uma tarefa conduzida no Templo de Brahma (montanhas de Hanoi – sacerdotes brâmanes). Dizia, ainda, que na criação do mundo, aos sacerdotes foi dada uma plataforma de metal na qual existiam três hastes de diamante. Estrutura de Dados
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.