Preview only show first 10 pages with watermark. For full document please download

Aed 05

Aula de Algoritmo e Estrutura de Dados do Professor Patrick Pedreira.

   EMBED


Share

Transcript

Algoritmos e Estruturas de Dados Recursividade Conceituação  Um módulo pode ser ativado a partir de qualquer módulo Recursividade  Quando um módulo faz chamada a si mesmo dizemos que fez uma chamada recursiva  Para entendermos recursão veremos a definição de funções/equações de recorrência Prof. Patrick Pedreira Recursividade Vejamos um exemplo de uma função simples (F) e de uma função recorrente (R):  F(x) = 10 * x + 2  R(x) = 10 * R(x-1) + 2 para x >1, e R(x)=1 para x=1  Vejamos a resolução para os valores 1, 2, 3 e 4.  Função de recorrência é uma função expressa em função de si mesma, ou seja, a resolução da função implica uma resolução anterior da função para outro valor Recursividade  F(1)=10*1+2=12  F(2)=10*2+2=22  F(3)=10*3+2=32  F(4)=10*4+2=42  R(1)=1  por definição, ou base  R(2)=10*R(1)+2=10*1+2=12  R(3)=10*R(2)+2=10*12+2=122  R(4)=10*R(3)+2=10*122+2=1222 A resolução da função recorrente R para valores maiores que 1 só é possível após a resolução da função anterior. 1 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade Recursividade Vejamos a resolução de R(4) se antes não tivéssemos resolvido as equações anteriores  R(4)=10*R(3)+2  fib(0) = 0 e fib(1) = 1  =10*(10*(10*R(1)+2)+2)+2  =10*(10*(10*1+2)+2)+2 R(1)=1  =10*(10*(12)+2)+2 R(2)=12  =10*(122)+2 R(3)=122  =1220+2 R(4)=1222 Recursividade =x* xn-1 (base)  Fatorial  n! = n * (n-1)!  0! = 1 para n>0; (base)  Mesmo operações que à primeira vista não parecem ser recursivas, muitas vezes podem ser expressas como funções recursivas. Recursividade Exponenciação (expressa por multiplicações)  xn  Fibonacci  fib(n) = fib(n-1) + fib(n-2) para n>1;  =10*(10*R(2)+2)+2  =1222 Alguns exemplos de funções recursivas para n>0;  x0=1 (base) Multiplicação (expressa por adições)  x*y=x+x*(y-1) para n>0  x*0=0 (base) Recursividade expressa por módulos  Do ponto de vista algorítmico, recursividade nada mais é do que a ativação de um módulo por si mesmo.  O módulo ativador e o ativado são os mesmos  Temos que entender que, apesar de ser o mesmo código que está sendo ativado, não é o mesmo módulo em execução, e sim uma réplica dele.  Cada módulo tem seu próprio espaço de memória, sua própria pilha e assim por diante.  No inicio/final de um módulo recursivo, assim como em qualquer módulo, suas variáveis são empilhadas/desempilhadas 2 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade Recursividade  Formato genérico de um módulo recursivo Recursivo (r1: inteiro): inteiro  Problema – Encontrar o fatorial de um número utilizando recursividade  Vejamos como seria a implementação de um módulo iterativo var v1, v2: inteiro; Fatorial_Iterativo(fat: inteiro): inteiro início var aux: inteiro; v2Recursivo(v1); início aux 1; {0! = 1  base} enquanto (aux < fat) faça fim início  O problema da estrutura anterior é que esse módulo nunca se encerra fat fat * aux; aux  aux + 1;  Para que o processo recursivo chegue ao final, é necessário que haja um ponto de parada.  Esse ponto explicita a saída do módulo Recursividade fim retorne(fat); fim Recursividade Fatorial_Recursivo(fat: inteiro): inteiro Observações var fat: inteiro; início se (n=0) então {base} fat 1; senão fat  n * Fatorial_Recursivo(n-1); retorne(fat);  O algoritmo recursivo é mais compacto e simples de se construir do que o iterativo {função recorrente) fim Principal():neutro var fatorial, num: inteiro; início Vejamos o acompanhamento do algoritmo através de uma pilha escreva(“Entre com o valor a ser calculado o fatorial: ”); leia(“num”); fatorial  Fatorial_Recursivo(num); escreva(“O fatorial é: ”, fatorial); fim 3 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade Recursividade Recursividade Recursividade 4 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade Recursividade Recursividade Recursividade 5 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade  A resoluç resolução do mó módulo recursivo tem 2 fases: a primeira é a de preparaç preparação, quando os mó módulos vão sendo alocados recursivamente, de forma sucessiva, até até se chegar ao ponto base. Neste momento, todos os valores da equaç equação recorrente estão empilhados em funç função de valores menores da pró própria equaç equação.  Ao se resolver a equaç equação para o valor base, começ começa-se a segunda fase, a de resoluç resolução de equaç equações empilhadas. Apó Após a resoluç resolução da base, o valor é utilizado para resolver a equaç equação recorrente para o valor imediatamente sucessivo. Recursividade  Este processo se repete, resolvendo equaç equações intermediá intermediárias até até chegar à equaç equação original desejada.  Mesmo processo utilizado para resolver a equaç equação recorrente R(x) = 10 * R(x-1) + 2 para x >1, e R(x)=1 para x=1 Recursividade  Problema – multiplicar por meio de adiç adição utilizando mó módulos Recursividade  Problema – multiplicar por meio de adiç adição utilizando mó módulos  x*y=x+x*(y-1) para n>0  x*y=x+x*(y-1) para n>0  x*0=0 (base)  x*0=0 (base) 6 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message. Recursividade Recursividade  Problema – multiplicar por meio de adiç adição utilizando mó módulos  x*y=x+x*(y-1) para n>0  x*0=0 (base) 7 Please purchase 'e-PDF Converter and Creator' on http://www.e-pdfconverter.com to remove this message.