Introdução à Programação
Recursão
Tópicos Principais
• Recursão
• Definições recursivas
• Funções Recursivas
• Implementação
• Comportamento
Definições Recursivas
• Em uma definição recursiva um item é definido em termos de si mesmo, ou seja, o item que está sendo definido aparece como parte da definição;
• Em todas as funções recursivas existe:
– Caso base (um ou mais) cujo resultado é imediatamente conhecido.
– Passo recursivo em que se tenta resolver um sub-problema do
problema inicial.
Definições Recursivas
• Exemplo: o fatorial de um número
>
−
×
= =
0 ,
)!
1 (
0 ,
! 1
n se n
n
n n se
Caso BASE Caso BASE
Passo Recursivo
Definições Recursivas
• Exercício: forneça a definição recursiva para a operação de potenciação
>
×
=
−=
0 ,
0 ,
1
) 1
(
se n
x x
n x
nse
nCaso BASE Caso BASE
Passo Recursivo
Funções Recursivas
• Definição:
– Uma função recursiva é aquela que faz uma chamada para si mesma. Essa chamada pode ser:
• direta: uma função A chama a ela própria
• indireta: função A chama uma função B que, por sua vez, chama A
-- Recursao direta function func_rec(n)
...
func_rec(n-1) ...
end
-- Função recursiva para cálculo do fatorial function fat(n)
if n == 0 then return 1 else
return n*fat(n-1) end
end
Funções Recursivas
• Exemplo: função recursiva para cálculo de fatorial
>
−
×
= =
0 ,
)!
1 (
0 ,
! 1
n se n
n
n n se
Caso BASE
Passo Recursivo
-- Função recursiva para cálculo de potenciacao function pot (x, n)
if n == 0 then return 1 else
return x*pot(x,n-1) end
end
Funções Recursivas
• Exercício: função recursiva para cálculo de potenciação
Caso BASE
Passo Recursivo
>
×
=
−=
0 ,
0 ,
1
) 1
(
se n
x x
n
x
nse
nFunções Recursivas
• Comportamento:
– quando uma função é chamada recursivamente, cria-se um ambiente local para cada chamada
– as variáveis locais de chamadas recursivas são independentes
entre si, como se estivéssemos chamando funções diferentes
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
end
- 3
r
-
n f fat(3)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
- 2
- 3
r n f fat(3)
n fat(2)f
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
end
- 1
- 2
- 3
r
-
n f fat(3)
n fat(2)f
n f fat(1)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
- 0
- 1
- 2
- 3
r n f fat(3)
n fat(2)f
n f fat(1)
n f fat(0)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
end
1 0 - 1
- 2
- 3
r
-
n f fat(3)
n fat(2)f
n f fat(1)
n f fat(0)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
1 1 - 2
- 3
r n f fat(3)
n fat(2)f
n f fat(1)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
end
2 2 - 3
r
-
n f fat(3)
n fat(2)f
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
6 3
r n f fat(3)
Funções Recursivas
-- Função recursiva para cálculo do fatorial function fat (n)
if n == 0 then f = 1
else
f = n * fat(n-1) end
return f end
-- Função principal function main ()
n = 3
r = fat ( n )
print(“Fatorial de “..n..“ = “..r.. “) return
end r
6
Funções Recursivas
• Exemplo: série de Fibonacci
>
− +
−
=
=
=
1 se
), 2 (
) 1 (
1 se
1,
0 se
, 0 )
(
n n
fib n
fib n
n n
fib
Passo Recursivo Caso BASE2 casos
BASE
Funções Recursivas
• Exemplo: série de Fibonacci
-- Calculo da serie de Fibonacci function fib (n)
if n == 0 then return 0
elseif n == 1 then return 1
else
return (fib(n-1) + fib(n-2)) end