Buscar

ALG2-04

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ricardo.marcacini@ufms.br
Prof. Ricardo M. Marcacini
Curso:
Algoritmos e Programação IIAlgoritmos e Programação II
Sistemas de Informação
2º Semestre / 2013
http://www.marcacini.com.br/ufms/
Aula 4
 Algoritmos Recursivos
 Aplicação: Fractais
 Exemplos de Algoritmos Recursivos
 Complexidade de Algoritmos Recursivos
 Comparação: Iterativo VS Recursivo
ALG2-04 2
Recursividade
 Um programa recursivo é um programa que 
chama a si mesmo
 Dentro do corpo de uma função (ou procedimento), 
chamar novamente a própria função (ou procedimento)
ALG2-04 3
Recursividade
 Um programa recursivo é um programa que 
chama a si mesmo
 Dentro do corpo de uma função (ou procedimento), 
chamar novamente a própria função (ou procedimento)
 Um programa recursivo “mal formulado” 
realiza um loop infinito
ALG2-04 4
Recursividade
 Um programa recursivo é um programa que 
chama a si mesmo
 Dentro do corpo de uma função (ou procedimento), 
chamar novamente a própria função (ou procedimento)
 Um programa recursivo “mal formulado” 
realiza um loop infinito
 Necessário uma condição de parada
 A condição de parada depende do problema
ALG2-04 5
Recursividade
 O que acontece com os parâmetros e 
variáveis locais durante a recursão?
 Cada chamada da função tem seu próprio “escopo”
 Variáveis locais
 Parâmetros
ALG2-04 6
Recursividade
 Como funciona a execução de algoritmos 
recursivos?
ALG2-04 7
Recursividade
 Como funciona a execução de algoritmos 
recursivos?
 Cada chamada da função é tratada como um 
programa independente
 Quando uma função filha é chamada, a função pai é 
“congelada” e espera a execução
 Quando a função filha termina, a execução volta 
para a função pai
 Processo chamado de “Pilha de Execução”
ALG2-04 8
Algoritmos Recursivos
 Vamos estudar em aula alguns exemplos 
implementados usando recursão
 Fatorial
 Somar elementos de um vetor
 Série de Fibonacci
 Divisão Recursiva
 Busca Sequencial Recursiva
ALG2-04 9
Fatorial (recursivo)
 Entrada:
 Inteiro n
 Saída:
 Inteiro n! = n*(n-1)*(n-2)*(n-2)* … * 1
DUZAIR
Typewritten text
3
ALG2-04 10
Fatorial (recursivo)
 Entrada:
 Inteiro n
 Saída:
 Inteiro n! = n*(n-1)*(n-2)*(n-2)* … * 1
Função int fatorial_recursivo(int n){
se(n <= 0) retornar 1;
senão retornar n * fatorial_recursivo(n-1);
}
DUZAIR
Typewritten text
3
ALG2-04 11
Soma recursiva de elementos do vetor
 Entrada:
 Inteiro n (tamanho do vetor)
 Vetor de inteiros v
 Saída:
 Inteiro (soma)
ALG2-04 12
Soma recursiva de elementos do vetor
 Entrada:
 Inteiro n (tamanho do vetor)
 Vetor de inteiros v
 Saída:
 Inteiro (soma)
Função int soma_recursiva(int n, int v[]){
se(n < 0) retornar 0;
senão
 retornar v[n-1] + soma_recursiva(n-1,v);
}
DUZAIR
Typewritten text
=
ALG2-04 13
Série de Fibonacci
ALG2-04 14
Série de Fibonacci
 Função naturalmente recursiva...
ALG2-04 15
Série de Fibonacci
 Função naturalmente recursiva...
Função int fib(int n){
se(n < 2) retornar n;
senão retornar fib(n-1)+fib(n-2);
}
ALG2-04 16
Divisão Recursiva
 Implementar e estudar o seguinte 
programa:
ALG2-04 17
Busca Sequencial Recursiva
 Entrada:
 Número inteiro n≥0 (tamanho do vetor)
 Vetor v[0..n−1] com n números inteiros
 Um inteiro x (que desejamos buscar)
 Saída
 k no intervalo [0, n-1] tal que v[k] = x
 Obs: Se tal k não existe, devolve -1
ALG2-04 18
Busca Sequencial Recursiva
ALG2-04 19
Complexidade de Algoritmos Recursivos
 Necessário verificar complexidade de 
espaço (memória)
 Pilha de execução
 Número de chamadas recursivas
 Exemplo: Fatorial
ALG2-04 20
Complexidade de Algoritmos Recursivos
 Necessário verificar complexidade de 
espaço (memória)
 Pilha de execução
 Número de chamadas recursivas
 Exemplo: Fatorial
 Versão recursiva
 Tempo: O(n) Espaço: O(n)
 Versão iterativa
 Tempo: O(n) Espaço: O(1)
ALG2-04 21
Complexidade de Algoritmos Recursivos
 Equação de recorrência T(n) é utilizada 
para ajudar na análise da complexidade
 Qual a equação de recorrência que descreve a 
complexidade da função fatorial?
ALG2-04 22
Complexidade de Algoritmos Recursivos
 Equação de recorrência T(n) é utilizada 
para ajudar na análise da complexidade
 Qual a equação de recorrência que descreve a 
complexidade da função fatorial?
T(n) = 1 + T(n-1)
T(1) = 1
T(n) = 1 + T(n-1)
T(n-1) = 1 + T(n-2)
T(n-2) = 1 + T(n-3)
...
T(2) = 1 + T(1) 
ALG2-04 23
Quando usar recursão?
 Paradigma: dividir para conquistar
 Duas chamadas recursivas
 Cada uma resolve metade do problema
 Solução eficiente na prática
 Em muitas situações, recursividade é 
ineficiente
 Compare as versões iterativas e
recursivas do Fibonacci!
ALG2-04 24
Bibliografia
ZIVIANI, N. Projeto de algoritmos com implementações em 
Java e C++. 1. ed. São Paulo: Thomson Learning, 2006.
Projeto de Algoritmos – Cap.2 Paradigmas de Projeto de Algoritmos – Seção 2.2.2
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24

Continue navegando