Recurso
uma tcnica de programao na qual um
mtodo chama a si mesmo.
Recursividade
Considere por exemplo que queremos definir a operao de
multiplicao, em termos da operao mais simples de
adio:
Informalmente, multiplicar m por n (onde n no negativo)
somar m, n vezes:
Implementao iterativa da
multiplicao
Multiplicao Recursiva
Podemos tambm implementar a multiplicao
de um nmero m por n somando m com a
multiplicao de m por n-1.
m x n = m+m x (n-1)
2x4 = 2 + 2x(3)
Multiplicao Recursiva
A multiplicao de um nmero inteiro por outro inteiro
maior ou igual a zero pode ser definida recursivamente por
induo matemtica como a seguir:
m x n = 0 se n ==0
m n = m + (m (n 1)) se n > 0
Fatorial recursivo
Definio no recursiva (tradicional):
N! = 1, para N = 0.
N! = 1 x 2 x 3 x .... x N, para N>0
Definio recursiva:
N! = 1, para N = 0;
N! = N x (N - 1)!, para N > 0.
Fatorial recursivo
Definio no recursiva (tradicional):
N! = 1, para N = 0.
N! = 1 x 2 x 3 x .... x N, para N>0
implementao iterativa:
Fatorial recursivo
Definio recursiva:
N! = 1, para N <= 1;
N! = N x (N - 1)!, para N > 0.
Seqncia de Fibonacci
A seqncia de Fibonacci a seqncia de inteiros:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
se n==0 OU n==1
se n>=2
Seqncia de Fibonacci
(Implementao)
fib(n)=n
fib(n)=fib(n-2)+fib(n-1)
se n==0 OU n==1
se n>=2
Chamada a um mtodo
parmetros
formais
Chamada a um mtodo
parmetros
formais
Parmetros formais so
variveis locais do mtodo.
Outras variveis locais podem
ser declaradas
parmetros
reais
Programao II Prof. Mateus Raeder
Chamada a um mtodo
parmetros
formais
parmetros
reais
Programao II Prof. Mateus Raeder
Chamada de mtodo
Quando um mtodo chamado:
necessrios inicializar os parmetros formais com os valores
passados como argumento;
sistema precisa saber onde reiniciar a execuo do programa;
...
Registro de ativao
Registro de ativao:
rea de memria que guarda o estado de uma funo, ou seja:
variveis locais
valores dos parmetros;
endereo de retorno (instruo aps a chamada do mtodo corrente);
valor de retorno.
Registro de ativao
Registro de
ativao de
f3()
Parmetros e
variveis locais
Endereo de retorno
Valor de retorno
Registro de
ativao de
f2()
Parmetros e
variveis locais
Endereo de retorno
Valor de retorno
Registro de
ativao de
f1()
Parmetros e
variveis locais
Endereo de retorno
Valor de retorno
Registro de
ativao do
mtodo
main()
topo da pilha
...
PC=7
1
n=2
Registro de
ativao de
fat(2)
Registro de
ativao de
fat(3)
Registro de
ativao de
fat(4)
topo
topo
PC=7
=24
3*fat(2) =6
4*fat(3)
2*fat(1)
2
n=3
fatorial de 4
topo
PC=7
6
n=4
topo
PC = 12
24
resultado=24
=2
Vantagens e Desvantagens
Vantagens da recurso
Reduo do tamanho do cdigo fonte
Maior clareza do algoritmo para problemas de definio
naturalmente recursiva
Desvantagens da recurso
Baixo desempenho na execuo devido ao tempo para
gerenciamento das chamadas
Dificuldade de depurao dos subprogramas recursivos,
principalmente se a recurso for muito profunda