Escolar Documentos
Profissional Documentos
Cultura Documentos
II
Recursividade
Objeto
Um objeto é tipo recursivo se ele é definido parcialmente
em termos de si próprio
Função
Uma função recursiva possui no seu corpo uma chamada a
si mesma (direta ou indiretamente).
4
Recursividade
Exemplos
fatorial
1 𝑠𝑒 𝑛 = 0
n! =
𝑛∗ 𝑛−1 ! 𝑐𝑐
fibonacci
1 𝑠𝑒 𝑛 = 0
F(n) = 1 𝑠𝑒 𝑛 = 1
F(n−1) + F(n−2) 𝑐𝑐
5
Método para problemas
recursivos
se a instância é pequena, resolva-a diretamente
Base
Senão
1. reduza-a a uma instância menor do problema
Recursivo
6
Função recursiva
Fatorial
Caso base
1 𝑠𝑒 𝑛 = 0
n! =
𝑛∗ 𝑛−1 ! 𝑠𝑒 𝑛 > 0
Recorrência
Função Fibonacci
1 𝑠𝑒 𝑛 = 0 Caso base
F(n) = 1 𝑠𝑒 𝑛 = 1
F(n−1) + F(n−2) 𝑠𝑒 𝑛 > 1
Recorrência
Função em C
int fatorial(int n)
{
if (n == 0) return 1;
else
return fatorial(n-1) * n;
}
Int Fib(int n)
{
if(n <= 1)
return 1;
else
return (Fib(n-1) + Fib(n-2));
}
Atividade
Implemente uma função recursiva para
computar o valor de 2n
Problema 𝟐𝒏
Int Pot2(int n) {
if (n==0)
return 1;
else
return 2 * Pot2(n-1);
}
Problema 𝒙𝒏
15
Soma arranjo – outra maneira
int SV(int *v, int e, int d){
int m;
if (e==d)
return v[e];
else{
m=(e+d)/2;
return SV(v,e,m)+SV(v,m+1,d);
}
}
16
Inverte arranjo
int IV(int *v, int a, int b){
int aux;
if (a<b){
aux=v[a];
v[a]=v[b];
v[b]=aux;
return IV(v,a+1,b-1);
}
}
17
Torre de Hanoi
http://en.wikipedia.org/wiki/Tower_of_Hanoi
Torre de Hanoi
25
Curva de Koch
http://pt.wikipedia.org/wiki/Curva_de_Koch
26
Curva de Koch
http://pt.wikipedia.org/wiki/Curva_de_Koch
http://pt.wikipedia.org/wiki/Recursividade
28
Floco de Neve
http://pt.wikipedia.org/wiki/Recursividade
29
Triângulo de Sierpinski
http://pt.wikipedia.org/wiki/Ficheiro:Sierpinski_triangle_evolution.svg
30
Triângulo de Sierpinski
http://pt.wikipedia.org/wiki/Ficheiro:Sierpinski_triangle_evolution.svg
31
Objeto recursivo
void estrela(int x,int y, int r)
{
if ( r > 0 )
{
estrela(x-r, y+r, r div 2);
estrela(x+r, y+r, r div 2);
estrela(x-r, y-r, r div 2);
estrela(x+r, y-r, r div 2);
box(x, y, r);
}
}
32
régua
int regua(int l,int r,int h)
{
int m;
if ( h > 0 )
{
m = (l + r) / 2;
marca(m, h);
regua(l, m, h – 1);
regua(m, r, h – 1);
}
}
Atividade 01
1 se n 1
Recursividade é
f ( n) 1 se n 2 sempre a
f (n 1) f (n 2) se n 2 melhor solução.
Comente está
afirmação.
34
Atividade 02
35
Referência
http://pt.wikipedia.org/wiki/Recursividade