Beruflich Dokumente
Kultur Dokumente
DCC119 - Algoritmos
Nesta Aula
Definio de recurso
Uso de recurso
Exerccios
2
Definio
4
Entendendo recursividade
Como chego Rua Oswaldo Cruz?
5
Entendendo recursividade
Como chego Rua Oswaldo Cruz?
8
Exemplo de Algoritmo
recursivo
Implementao iterativa muito simples:
9
Exemplo de Algoritmo
recursivo
Implementao iterativa muito simples:
10
Exemplo de Algoritmo
recursivo
Tanto a definio matemtica quanto o cdigo
anterior so simples, porm mais elegante definir o
fatorial como:
1, se n = 1
n!
n * (n-1)!, se n > 1
12
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! =
13
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
14
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! =
15
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
16
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
2! =
17
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
18
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! =
19
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
20
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1! = 2 * 1 = 2
1! = 1
21
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3!
3! = 3 * 2! = 3 * 2 = 6
2! = 2 * 1! = 2 * 1 = 2
1! = 1
22
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3! = 4 * 6 = 24
3! = 3 * 2! = 3 * 2 = 6
2! = 2 * 1! = 2 * 1 = 2
1! = 1
23
Exemplo de Algoritmo
recursivo
fatorial de 4! 1, se n = 1
n!
n * (n-1)!, se n > 1
4! = 4 * 3! = 4 * 6 = 24
3! = 3 * 2! = 3 * 2 = 6
2! = 2 * 1! = 2 * 1 = 2
1! = 1
Portanto, 4! = 24
24
Exemplo de Algoritmo
recursivo
Condio que define parada da recurso:
chamada base da recurso ou de caso
base
1, se n = 1 Base da recurso
n!
26
Exemplo de Algoritmo
recursivo
inteiro FatorialRecursivo (inteiro n)
{
se (n = 1) Base da recurso
{
retorne 1;
}
seno
{
retorne (n * FatorialRecursivo (n 1));
}
}
27
Exemplo de Algoritmo
recursivo
inteiro FatorialRecursivo (inteiro n)
{
se (n = 1)
{
retorne 1;
}
seno
{
retorne (n * FatorialRecursivo (n 1));
}
}
Passo recursivo
28
Exemplo de Algoritmo
recursivo
int FatorialRecursivo (int n)
{
if (n == 1) Base da recurso
return (1);
else
return (n * FatorialRecursivo (n - 1));
}
Passo recursivo
29
Simulando o algoritmo
N FatorialRecursivo (4);
30
Simulando o algoritmo
4
inteiro FatorialRecursivo (inteiro n)
{
se (n = 1)
{
N FatorialRecursivo (4); retorne 1;
}
seno
{
retorne (n * FatorialRecursivo (n - 1));
}
}
31
Simulando o algoritmo
FatorialRecursivo (4)
inteiro FatorialRecursivo (4)
{
se (4 = 1)
{
retorne 1;
}
seno
{
retorne (4 * FatorialRecursivo (4 - 1));
}
}
32
Simulando o algoritmo
4 3
FatorialRecursivo (3)
inteiro FatorialRecursivo (3)
{
se (3 = 1)
{
retorne 1;
}
seno
{
retorne (3 * FatorialRecursivo (3 - 1));
}
}
33
Simulando o algoritmo
4 3 2
FatorialRecursivo (2)
inteiro FatorialRecursivo (2)
{
se (2 = 1)
{
retorne 1;
}
seno
{
retorne (2 * FatorialRecursivo (2 - 1));
}
}
34
Simulando o algoritmo
4 3 2 1
FatorialRecursivo (1)
inteiro FatorialRecursivo (1)
{
se (1 = 1)
{
retorne 1;
}
seno
{
retorne (n * FatorialRecursivo (n - 1));
}
}
35
Simulando o algoritmo
4 3 2 1
1
FatorialRecursivo (2)
inteiro FatorialRecursivo (2)
{
se (2 = 1)
{
retorne 1;
}
seno
{ // retorne (2 * FatorialRecursivo (2 - 1));
retorne (2 * 1));
}
}
36
Simulando o algoritmo
4 3 2 1
2 1
FatorialRecursivo (3)
inteiro FatorialRecursivo (3)
{
se (3 = 1)
{
retorne 1;
}
seno
{ // retorne (3 * FatorialRecursivo (3 - 1));
retorne (3 * 2));
}
}
37
Simulando o algoritmo
4 3 2 1
6 2 1
FatorialRecursivo (4)
inteiro FatorialRecursivo (4)
{
se (4 = 1)
{
retorne 1;
}
seno
{ // retorne (4 * FatorialRecursivo (4 - 1));
retorne (4 * 6));
}
}
38
Simulando o algoritmo
4 3 2 1
6 2 1
FatorialRecursivo (4)
24
inteiro FatorialRecursivo (4)
{
se (4 = 1)
{
retorne 1;
N 24; }
seno
{ // retorne (4 * FatorialRecursivo (4 - 1));
retorne (4 * 6));
}
}
39
Exerccio
40
Exerccio
int MDC (int n, int m)
{
41
Exerccio
int MDC (int n, int m)
{
if ( (n>=m) && ((n%m)==0) )
return(m);
42
Exerccio
int MDC (int n, int m)
{
if ( (n>=m) && ((n%m)==0) )
return(m);
else
{
}
}
43
Exerccio
int MDC (int n, int m)
{
if ( (n>=m) && ((n%m)==0) )
return(m);
else
{
if (n<m)
return (MDC(m,n));
}
}
44
Exerccio
int MDC (int n, int m)
{
if ( (n>=m) && ((n%m)==0) )
return(m);
else
{
if (n<m)
return (MDC(m,n));
else
return (MDC(m,n%m));
}
}
45
Exerccio
1) Faa um procedimento recursivo que receba dois
valores inteiros a e b e imprima o intervalo
fechado entre eles. Se a for maior que b mostrar
mensagem de erro.
47
Exerccios
48
Recursividade
DCC120
Laboratrio de Programao
Definio
50
Exemplo de Algoritmo
recursivo
Clculo do valor de 2n para um nmero n:
Aprendemos que 2n = 2 * 2 * 2 * D * 2.
51
Exemplo de Algoritmo
recursivo
Implementao iterativa muito simples:
int Potencia(int n)
{
int Pot, i;
Pot = 1;
for (i = 1; i <= n; i++)
Pot = Pot * 2;
return (Pot);
}
52
Exemplo de Algoritmo
recursivo
Calcular o valor de 2n como sendo 2 * 2n-1:
2, se n = 1
2n
2 * 2n-1, se n > 1
53
Exemplo de Algoritmo
recursivo
Significa que, para clculo do valor de 2n
para um determinado n, h necessidade de
que se recorra aos clculos anteriores.
54
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
24 =
55
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
24 = 2 * 23
56
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
23 =
57
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
23 = 2 * 22
58
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
2 3 = 2 * 22
22 =
59
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
2 3 = 2 * 22
22 = 2 * 21
60
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
2 3 = 2 * 22
2 2 = 2 * 21
21 =
61
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
2 3 = 2 * 22
2 2 = 2 * 21
21 = 2
62
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
2 3 = 2 * 22
22 = 2 * 21 = 2 * 2 = 4
21 = 2
63
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
2 4 = 2 * 23
23 = 2 * 22 = 2 * 4 = 8
2 2 = 2 * 21 = 2 * 2 = 4
21 = 2
64
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
24 = 2 * 23 = 2 * 8 = 16
2 3 = 2 * 22 = 2 * 4 = 8
2 2 = 2 * 21 = 2 * 2 = 4
21 = 2
65
Exemplo de Algoritmo
recursivo
24 2, se n = 1
2n
2 * 2n-1, se n > 1
24 = 2 * 23 = 2 * 8 = 16
2 3 = 2 * 22 = 2 * 4 = 8
2 2 = 2 * 21 = 2 * 2 = 4
21 = 2
Portanto, 24 = 16
66
Exemplo de Algoritmo
recursivo
Condio que define parada da recurso:
chamada base da recurso ou de caso
base
2, se n = 1 Base da recurso
2n
68
Exemplo de Algoritmo
recursivo
int PotenciaRecursivo (int n)
{
if (n == 1) Base da recurso
return (2);
else
return (2 * PotenciaRecursivo (n - 1));
}
Passo recursivo
69
Exerccios
1) Escreva uma funo recursiva para calcular o N-simo
nmero da sequncia de Fibonacci. A sequncia
dada por:
70
Exerccios
4) Escreva um procedimento recursivo, ImprimeSerie (i, j,
k), que imprime na tela a srie de valores do intervalo
[i,j], com incremento k (i, j e k so inteiros).
71