p33recursao

Propaganda
INE5403 - Fundamentos de Matemática
Discreta para a Computação
3) Indução e Recursão
3.1) Indução Matemática
3.2) Indução Forte
3.3) Definições Recursivas (funções, conjuntos, estruturas)
3.4) Indução Estrutural
3.5) Algoritmos Recursivos
Definições recursivas
• Algumas vezes pode ser difícil definir um objeto
explicitamente, mas pode ser fácil defini-lo
recursivamente, incluindo o item que está sendo
definido como parte da definição.
• A recursão pode ser usada para definir seqüências,
funções e conjuntos.
• Exemplo:
- uma seqüência de potências de 2 é dada por:
an = 2n para n=0,1,2
- mas ela também pode ser definida a partir do 1o termo
e de uma regra para encontrar um termo da seqüência
a partir do anterior, ou seja:
a0 = 1
an+1 = 2.an , para n=0,1,2,...
Funções definidas recursivamente
Exemplo:
f(0) = 3
f(n+1) = 2.f(n) + 3
Encontre f(1), f(2), f(3) e f(4).
Solução:
f(1) = 2.f(0) + 3 = 2.3 + 3 = 9
f(2) = 2.f(1) + 3 = 2.9 + 3 = 21
f(3) = 2.f(2) + 3 = 2.21 + 3 = 45
f(4) = 2.f(3) + 3 = 2.45 + 3 = 93
Funções definidas recursivamente
Exemplo (função fatorial): Forneça uma definição recursiva
da função fatorial F(n) = n! .
• Pode-se definir a função fatorial especificando o valor
inicial desta função:
F(0) = 1
• e uma regra para encontrar F(n+1) a partir de F(n):
F(n+1) = (n+1).F(n)
• Assim, para calcular o valor de 5! desta forma, aplica-se
a definição diversas vezes:
F(5) = 5.F(4) = 5.4.F(3) = 5.4.3.F(2) =
= 5.4.3.2.F(1) = 5.4.3.2.1.F(0) =
= 5.4.3.2.1.1 = 120
Algoritmos definidos recursivamente
Exemplo: suponha uma seqüência definida como:
1. S1 = 2
2. Sn = 2.Sn-1 para n2
Solução 1: um algoritmo para calcular um S desta
seqüência, dado um valor de n, pode ser:
function S(n)
if n=1 then
S:=2
else
i=2
S:=2
while i<=n do
S:=2*S
i:=i+1
end
endif
Algoritmos definidos recursivamente
Exemplo(cont.): suponha uma seqüência definida como:
1. S1 = 2
2. Sn = 2.Sn-1 para n2
Solução 2: um algoritmo recursivo para resolver o mesmo
problema seria:
function S(n)
if n=1 then
S:=2
else
S:=2*S(n-1)
endif
Algoritmos definidos recursivamente
Exemplo: construa uma versão recursiva do algoritmo de
busca binária, usado para localizar um valor x em uma
seqüência a1,a2,...,an.
Solução: procura x na seção da seqüência entre ai e aj:
function busca binaria(x,i,j)
m:=int((i+j)/2)
if x=am then
loc:=m
else
if (x<am and i<m) then
busca binaria(x,i,m-1)
else
if (x>am and j>m) then
busca binaria(x,m+1,j)
else
loc:=0
endif
Download