Você está na página 1de 20

Introdução à Programação

Recursão

1
Tópicos Principais

• Recursão
• Definições recursivas
• Funções Recursivas
• Implementação
• Comportamento

2
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.

3
Definições Recursivas

• Exemplo: o fatorial de um número

Caso BASE

1, se n = 0
n!= 
n × (n − 1)!, se n > 0

Passo
Recursivo

4
Definições Recursivas

• Exercício: forneça a definição recursiva para a operação


de potenciação

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

• Exemplo: função recursiva para cálculo de fatorial

1, se n = 0
n!= 
n × (n − 1)!, se n > 0

-- Função recursiva para cálculo do fatorial


function fat(n)
if n == 0 then
return 1 Caso BASE
else
return n*fat(n-1)
Passo
end
Recursivo
end

7
Funções Recursivas

• Exercício: função recursiva para cálculo de potenciação

n 1, se n = 0
x = ( n −1)
 x × x , se n > 0

-- Função recursiva para cálculo de potenciacao


function pot (x, n)
if n == 0 then
return 1 Caso BASE
else
return x*pot(x,n-1)
Passo
end
Recursivo
end

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

• Exemplo: série de Fibonacci

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

• 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

20

Você também pode gostar