Escolar Documentos
Profissional Documentos
Cultura Documentos
Recursão
1
Tópicos Principais
• Recursão
• Definições recursivas
• Funções Recursivas
• Implementação
• Comportamento
2
Definições Recursivas
3
Definições Recursivas
Caso BASE
1, se n = 0
n!=
n × (n − 1)!, se n > 0
Passo
Recursivo
4
Definições Recursivas
Caso BASE
n 1, se n = 0
x = ( n −1)
x × x , se n > 0
Passo
Recursivo
5
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
6
Funções Recursivas
1, se n = 0
n!=
n × (n − 1)!, se n > 0
7
Funções Recursivas
n 1, se n = 0
x = ( n −1)
x × x , se n > 0
8
Funçõ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
9
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 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
10
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
fat(2)
f -
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
11
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) f
end -
fat(1)
return f n 1
end
fat(2)
f -
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
12
Funções Recursivas
-- Função recursiva para cálculo do fatorial
function fat (n)
if n == 0 then f -
f = 1 fat(0)
else n 0
f = n * fat(n-1) f
end
-
fat(1)
return f n 1
end
fat(2)
f -
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
13
Funções Recursivas
-- Função recursiva para cálculo do fatorial
function fat (n)
if n == 0 then f 1
f = 1 fat(0)
else n 0
f = n * fat(n-1) f
end
-
fat(1)
return f n 1
end
fat(2)
f -
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
14
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) f
end 1
fat(1)
return f n 1
end
fat(2)
f -
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
15
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
fat(2)
f 2
-- Função principal
function main ()
n 2
n = 3 f -
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
16
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 f 6
r = fat ( n ) fat(3)
print(“Fatorial de “..n..“ = “..r.. “) n 3
return
r -
end
main
n 3
17
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
r 6
end
main
n 3
18
Funções Recursivas
2 casos
Caso BASE
0, se n = 0 BASE
fib(n) = 1, se n = 1
fib(n − 1) + fib( n − 2), se n > 1
Passo
Recursivo
19
Funções Recursivas
20