A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Marco Antonio Montebello Júnior

Apresentações semelhantes


Apresentação em tema: "Marco Antonio Montebello Júnior"— Transcrição da apresentação:

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


Carregar ppt "Marco Antonio Montebello Júnior"

Apresentações semelhantes


Anúncios Google