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

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

Recursividade Marco Antonio Montebello Júnior Estrutura de Dados.

Apresentações semelhantes


Apresentação em tema: "Recursividade Marco Antonio Montebello Júnior Estrutura de Dados."— Transcrição da apresentação:

1 Recursividade Marco Antonio Montebello Júnior Estrutura de Dados

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

3 Estrutura de Dados 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.

4 Estrutura de Dados 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 x 1)) = 4 x (3 x 2) = 4 x 6 = 24

5 Estrutura de Dados 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.

6 Estrutura de Dados 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); }

7 Estrutura de Dados Chamando a função: fatorial(3)

8 Estrutura de Dados 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) )); }

9 Estrutura de Dados Utilizando árvore de recursão

10 Estrutura de Dados 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

11 Estrutura de Dados 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

12 Estrutura de Dados Para facilitar o acompanhamento, podemos utilizar Ilustrações especiais Árvores de Recursão

13 Estrutura de Dados 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); }

14 Estrutura de Dados Alguns resultados mdc (6,12) = 6 mdc (12,20) = 4 mdc (20,24) = 4

15 Estrutura de Dados 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?

16 Estrutura de Dados 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.


Carregar ppt "Recursividade Marco Antonio Montebello Júnior Estrutura de Dados."

Apresentações semelhantes


Anúncios Google