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 n2 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 n2 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