Beruflich Dokumente
Kultur Dokumente
Recursividade
2
Problema
Ao final desses passos, a situao do vetor ser a
seguinte:
esquerda da posio central, existem somente
elementos menores do que m;
direita da posio central, existem somente elementos
maiores do que m;
3
Problema 2
Considere o exemplo abaixo:
Ordenar {4,1,3,5,2}
4 1 3 5 2
Ordenar {2,1} Ordenar {5,4}
2 1 5 4
1 2 4 5
Ordenar {1} Ordenar {2} Ordenar {4} Ordenar {5}
Como a natureza dos problemas sempre a mesma
(ordenar um vetor), o mesmo mtodo pode ser usado
para cada subproblema.
4
Anlise do programa
5
Recursividade
A funo quicksort implementada um exemplo de
funo recursiva: funo que chama a si mesma.
A recursividade uma forma interessante de resolver
problemas por meio da diviso dos problemas em
problemas menores de mesma natureza.
Se a natureza dos subproblemas a mesma do
problema, o mesmo mtodo usado para reduzir o
problema pode ser usado para reduzir os subproblemas
e assim por diante.
Quando devemos parar? Quando alcanarmos um caso
trivial que conhecemos a soluo.
6
Recursividade
Assim, um processo recursivo para a soluo de um
problema consiste em duas partes:
1. O caso trivial, cuja soluo conhecida;
2. Um mtodo geral que reduz o problema a um ou mais
problemas menores (subproblemas) de mesma natureza.
7
Funo fatorial
A funo fatorial de um inteiro no negativo pode ser
definida como:
1 n0
n!
n (n 1)! n 0
Esta definio estabelece um processo recursivo para
calcular o fatorial de um inteiro n.
8
Funo fatorial
Assim, usando-se este processo recursivo, o clculo de
4!, por exemplo, feito como a seguir:
4! = 4 * 3!
= 4 * (3 * 2!)
= 4 * (3 * (2 * 1!))
= 4 * (3 * (2 * (1 * 0!)))
= 4 * (3 * (2 * (1 * 1)))
= 4 * (3 * (2 * 1))
= 4 * (3 * 2)
=4*6 Mas como uma funo recursiva como
= 24 esta de fato implementada no
computador?
Pilha de Execuo
Empilha fatorial(4)
10
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Empilha fatorial(3)
11
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Empilha fatorial(2)
12
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Empilha fatorial(1)
13
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Empilha fatorial(0)
14
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Desempilha fatorial(0)
15
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Desempilha fatorial(1)
16
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Desempilha fatorial(2)
17
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Desempilha fatorial(3)
18
Funo fatorial
Considere, novamente, o exemplo para 4!:
Pilha de Execuo
Desempilha fatorial(4)
19
Funo fatorial
Considere, novamente, o exemplo para 4!:
Resultado = 24
20
Menor elemento de uma lista
A funo menorElemento de uma lista de n inteiros pode
ser definida como:
menorElemento(lista, i, n) = lista[i], se i == n
menor(lista[i], menorElemento(lista,i+1,n)), se i != n
E a funo menor(x,y) retorna o menor nmero entre x e y
22
Menor elemento de uma lista
23
Funo Fibonacci
A funo Fibonacci retorna o n-simo nmero da
seqncia: 1, 1, 2, 3, 5, 8, 13, ....
1 n 1
fib(n) 1 n2
fib(n 2) fib(n 1) n 2
24
Funo Fibonacci
Veja uma implementao recursiva para esta funo:
1 1
fib(1) fib(2)
1 1 1 1 1 2
fib(1) fib(2) fib(1) fib(2) fib(2) fib(3)
1 2 2 3
fib(2) fib(3) fib(3) fib(4)
3 5
fib(4) 8 fib(5)
fib(6)
25
Funo Fibonacci
A funo recursiva para clculo do n-simo termo da
seqncia extremamente ineficiente, uma vez que
recalcula o mesmo valor vrias vezes
26
Funo Fibonacci
O livro dos autores Brassard e Bradley (Fundamentals
of Algorithmics, 1996, pg. 73) apresenta um quadro
comparativo de tempos de execuo das verses
iterativa e recursiva:
n 10 20 30 50 100