Buscar

AED1 02 Recursividade

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

Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Aula 02: Recursividade
Wanderley de Souza Alencar
wanderley@inf.ufg.br
Universidade Federal de Goia´s - UFG
Instituto de Informa´tica - INF
March 21, 2018
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Suma´rio
1 Introduc¸a˜o
2 Tipos de Recursividade
3 Escrevendo Func¸o˜es Recursivas
4 Vantagens e Desvantagens
5 Saiba Mais...
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Recursividade
Propriedade daquilo que se pode repetir um nu´mero indefinido de
vezes.
Um certo ente (concreto ou abstrato) e´ chamado de recursivo se
ele e´ definido em termos de si mesmo, auto-referenciando-se,
pore´m numa instaˆncia de menor dimensa˜o.
A grande ideia subjacente e´ possibilitar uma definic¸a˜o finita para
algo que pode ser, por esseˆncia, infinito.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Axioma de Peano
“O primeiro nu´mero natural e´ o 0 (zero).
O sucessor de um nu´mero natural e´ tambe´m um nu´mero natural.”
Giuseppe Peano (1858 – 1932)
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Recursividade
O uso do conceito de recursividade e´ extremamente conveniente
para a soluc¸a˜o de algumas classes de problemas...
...em especial na descric¸a˜o de soluc¸o˜es a serem executadas por
computadores – algoritmos computacionais.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Recursividade
Em Computac¸a˜o, a recursividade e´ o mecanismo de programac¸a˜o
pelo qual e´ poss´ıvel definir uma rotina (procedimento ou func¸a˜o)
em termos de si mesma, o que implica que em seu corpo de co´digo
ha´ uma chamada (ou invocac¸a˜o) para ela mesma.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Recursividade
Sa˜o termos sinoˆnimos:
recursa˜o;
recursividade;
autorefereˆncia;
recorreˆncia.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Exemplo 01
O fatorial de um nu´mero natural n, n ∈ N, pode ser escrito na˜o
recursivamente assim:
0! = 1
n! = n · (n − 1) · (n − 2) · · · 2 · 1
Usando-se a recursividade, pode-se definir:
n! =
{
1, se n = 0
n · (n − 1)!, se n > 0
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
1 //
2 // Fatorial (iterativo)
3 //
4 unsigned long int fatorial (unsigned long int num) {
5 unsigned long int fat=1, i;
6
7 for (i=num; (i > 1); i−−) {
8 fat = fat ∗ i;
9 }
10 return(fat);
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
1 //
2 // Fatorial (recursivo)
3 //
4 unsigned long int fatorial (unsigned long int num) {
5 if (num == 0) {
6 return (1);
7 }
8 else {
9 return (num ∗ fatorial(num−1));
10 }
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Comenta´rios
E´ fundamental que toda func¸a˜o recursiva preveja,
cuidadosamente, como o processo de recursa˜o sera´
interrompido;
Na func¸a˜o fatorial o processo e´ interrompido quando o
valor do nu´mero passado como paraˆmetro e´ igual a ZERO;
E´ importante notar que recursa˜o na˜o traz, obrigatoriamente,
economia de memo´ria, isto porque os valores sendo
processados sa˜o mantidos em pilhas;
Nem sera´ mais ra´pida que a versa˜o iterativa, e, a`s vezes, pode
ser ate´ (muito) mais lenta, porque tem-se o custo de chamada
das func¸o˜es.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Introduc¸a˜o
Exemplo 02
A poteˆncia natural de um nu´mero real x , x ∈ <, pode ser escrita
recursivamente assim:
1 //
2 // Elevar: xˆn
3 //
4 float elevar(float x, int n) {
5 if (n == 0) {
6 return (1);
7 }
8 if (n == 1) {
9 return (x);
10 }
11 else {
12 return (x ∗ elevar(x, n−1));
13 }
14 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
“Iterar e´ humano, fazer recursa˜o e´ divino.”
Laurence Peter Deutsch(1946 - . . . )
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Computacionalmente ha´, em verdade, dois poss´ıveis tipos de
recursividade:
1 direta;
2 indireta.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Reursividade
Direta
Na recursividade direta, uma rotina A possui em seu corpo uma
chamada para si mesma, como ja´ visto:
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Direta
1 A rotina A inicia sua execuc¸a˜o e, em alguma linha de
seu co´digo, chama a si mesma. Assim...;
2 a presente execuc¸a˜o e´ interrompida, todo seu
contexto e´ salvo e...
3 Uma nova execuc¸a˜o de A e´ iniciada...
4 os passos [2] e [3] podem ser repetidos diversas
vezes, ...
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Direta
5 ate´ que A atingira´ um caso ba´sico, onde nenhuma
chamada recursiva e´ realizada e aquela instaˆncia do
problema e´ resolvida diretamente. Em seguida, ...
6 as chamadas ja´ realizadas para A sa˜o, uma a uma,
resolvidas e retornam ate´ atingir...
7 a primeira chamada a A que, finalmente, e´ conclu´ıda.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Direta
As func¸o˜es recursivas anteriores, fatorial e elevar, empregam a
recursa˜o direta.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...Tipos de Recursividade
Indireta
Na recursividade indireta, a rotina A possui em seu corpo uma
chamada para outra rotina, B, que, por sua vez, possui em seu
copro uma chamada para a rotina A.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Indireta
Note que, dessa forma, cria-se um c´ırculo de chamadas:
A→ B → A→ B → · · · .
Este c´ırculo, evidentemente, tera´ que ser finito para que possa ser
utilizado de maneira pra´tica:
A→ B → A→ B → · · ·A
ou
A→ B → A→ B → · · ·B.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Considere duas func¸o˜es, f e g , gene´ricas, e definidas sobre os
nu´meros naturais:
f (x) =
{
2, se x ≤ 1
2 · g (x + 1) , se x > 1
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Considere duas func¸o˜es, f e g , gene´ricas, e definidas sobre os
nu´meros naturais:
g (y) =
{
3, se y ≥ 5
2 · f (y − 2) , se y < 5
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Indireta
Note que o par de func¸o˜es f e g sa˜o recursivas indiretamente, pois:
no corpo de f ha´ uma chamada para a func¸a˜o g , e;
no corpo de g ha´ uma chamada para a func¸a˜o f .
Como consequeˆncia, pode-se ter um looping infinito de chamadas?
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Qual a sequeˆncia de chamadas ao executarmos f (2)?
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Ou seja, teremos a seguinte sequeˆncia de chamadas:
1 f (2) = 2× g (2 + 1);
2 g (3) = 2× f (3− 2);
3 f (1) = 2.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Ao atingir a u´ltima chamada, que determina que f (1) = 2, havera´
a sequeˆncia de retornos das func¸o˜es f e g recursivamente
invocadas...
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
Ou seja, o retorno de cada uma das chamadas gera a sequeˆncia:
4 g (3) = 2× 2 = 4;
5 f (2) = 2× 4 = 8;
6 f (2) = 8.
Conclu´ıda com f (2) = 8.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 03
E´ fa´cil concluir que func¸o˜es indiretamente recursivas devem ser
elaboradas – e implementadas – com extrema atenc¸a˜o, pois e´ fa´cil
obter func¸o˜es que podem gerar loopings infinitos.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Indireta
Outra observac¸a˜o importante e´:
A recursa˜o indireta pode envolver mais de duas func¸o˜es, como em:
A→ B → C → A→ B → C · · ·A.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Extensa˜o da Classificac¸a˜o
A classificac¸a˜o das rotinas recursivas pode ainda ser extendida
para:
Direta em cauda – a recursa˜o ocorre na u´ltima
declarac¸a˜o da rotina recursiva A;
na˜o cauda – a recursa˜o ocorre numa declarac¸a˜o
que na˜o e´ a u´ltima de A;
linear – quando nenhuma das declarac¸o˜es
remanescentes de A exige chamadas recursivas;
em a´rvore – quando alguma das declarac¸o˜es
remanescentes de A exige chamadas recursivas.
Indireta
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
Exemplo 04
O somato´rio dos elementos de um vetor de nu´meros inteiros V
(V1×n), pode ser escrita como uma func¸a˜o recursiva linear:
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Tipos de Recursividade
1 //
2 // Somatorio dos elementos do vetor (recursivo): posicoes de 0 a (n−1)
3 //
4 unsigned long int somatorio (unsigned long int vetor[], unsigned int n) {
5 if (n == 1) {
6 return vetor[n−1];
7 }
8 else {
9 return (vetor[n−1] + somatorio(vetor,(n−1)));
10 }
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Sequeˆncia de Passos
Para escrever uma func¸a˜o recursiva, siga os seguintes passos:
1 Escreva um proto´tipo para a func¸a˜o recursiva;
2 Escreva um comenta´rio que descreva (o melhor
poss´ıvel) o que a func¸a˜o deve fazer;
3 Determine o caso ba´sico (lembre-se: pode haver mais
de um) e a soluc¸a˜o direta deste caso;
4 Determine qual e´ o problema imediatamente menor
que o atual a ser resolvido;
5 Use a soluc¸a˜o do problema imediatamente menor
para resolver o problema maior.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
Considere que devemos resolver o seguinte problema por meio do
uso de recursa˜o:
Somar todos os n elementos de um vetor de nu´meros naturais
(n ∈ N∗).
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
1 Escreva um proto´tipo da func¸a˜o recursiva:
unsigned long int somatorio(unsigned long
int vetor[], unsigned int n);.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
2 Escreva um comenta´rio que descreva (o melhor
poss´ıvel) o que a func¸a˜o deve fazer:
‘‘A func¸~ao deve somar os n elementos de um
vetor de nu´meros naturais.’’.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es RecursivasVantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
3 Determine o caso ba´sico (lembre-se: pode haver mais
de um) e a soluc¸a˜o direta deste caso:
O menor problema a ser resolvido e´
somatorio(vetor, 1).
Observac¸a˜o: lembre-se que em C o primeiro
elemento esta´ na posic¸a˜o 0, o segundo na posic¸a˜o 1
e, finalmente, n-e´simo elemento esta´ na posic¸a˜o
n − 1.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
4 Determine qual e´ o problema imediatamente menor
que o atual a ser resolvido:
O problema imediatamente menor que o de tamanho
n e´ o de tamanho n − 1:
somatorio(vetor, n-1)
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
5 Use a soluc¸a˜o do problema imediatamente menor
para resolver o problema maior:
vetor[n-1] + somatorio(vetor, n-1)
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 04
1 //
2 // Somatorio dos elementos do vetor (recursivo): posicoes de 0 a (n−1)
3 //
4 unsigned long int somatorio (unsigned long int vetor[], unsigned int n) {
5 if (n == 1) {
6 return vetor[n−1];
7 }
8 else {
9 return (vetor[n−1] + somatorio(vetor,(n−1)));
10 }
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 05
Torres de Hano´i
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 05
Algoritmo Recursivo:
1 Se n = 1, enta˜o mova este disco de A para B e pare;
2 Mova os (n − 1) discos superiores de A para C usando B
como auxiliar;
3 Mova o disco restante de A para B;
4 Mova os (n − 1) discos de C para B, usando A como auxiliar.
5 MA´GICA: NA˜O PRECISA SABER COMO MOVER...
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 05 – com TREˆS discos
Torres de Hano´i
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 05 – com QUATRO discos
Torres de Hano´i
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
1 //
2 // Torres de Hanoi (recursivo)
3 //
4 #include <stdio.h>
5 void towers(int nDiscos, char dePino, char paraPino, char auxPino) {
6 /∗ Se um disco somente, mova−o e retorne ∗/
7 if(nDiscos==1) {
8 printf(”Move disco 1 do pino %c para pino %c\n”, dePino, paraPino);
9 return;
10 }
11 /∗ Move n−1 discos superiores de A para C, usando B ∗/
12 towers(nDiscos−1, dePino, auxPino, paraPino);
13
14 /∗ Move discos restantes de A para B ∗/
15 printf(”Move disco %d do pino %c para pino %c\n”, nDiscos, dePino,
paraPino);
16
17 /∗ Move n−1 discos de C para B usando A como auxiliar ∗/
18 towers(nDiscos−1, auxPino, paraPino, dePino);
19 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 06
Calcular o mdc (ma´ximo divisor comum) entre dois nu´meros
naturais, a, b ∈ N.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 06
Algoritmo Recursivo:
1 Se b = 0, enta˜o retorne o valor a e pare;
2 Retorne o valor do mdc(b, a % b).
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
1 //
2 // mdc (recursivo)
3 //
4 unsigned long int mdc(unsigned long int a, unsigned long int b) {
5 if (b == 0) {
6 return(a);
7 }
8 else {
9 return (mdc(b, (a %b));
10 }
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 07
Nu´meros Binomiais
Sir Isaac Newton (1642 - 1727).
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 07
O nu´mero binomial Cnk , e´ definido por:
Cnk =
n!
k!×(n−k)!
com n, k ∈ N e n ≥ k .
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 07
Algoritmo Recursivo:
1 Se (n = k) ou (k = 0), enta˜o retorne o valor UM e pare;
2 Retorne o valor da soma dos binomais Cn−1k e C
n−1
k−1 .
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
1 //
2 // numero binomial (recursivo)
3 //
4 unsigned long int binomial(unsigned long int n, unsigned long int k){
5 if ((n == 0) || (k == n)) {
6 return (1);
7 }
8 return (binomial(n−1,k) + binomial(n−1,k−1));
9 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 08
Leonardo Bonacci (1175-1240/50) ou Leonardo de Pisa:
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 08
Espiral de Fibonacci:
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 08
Calcular o n-e´simo nu´mero da sequeˆncia de Fibonacci, com n ∈ N∗.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 08
Algoritmo Recursivo:
1 Se n = 1 ou n = 2, enta˜o retorne o valor 1 e pare;
2 Retorne o valor da soma dos elementos nas posic¸o˜es (n − 1) e
(n − 2).
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
1 //
2 // Numero de Fibonacci (recursivo)
3 //
4 unsigned long int fibonacci(unsignedlong int n) {
5 if ((n == 1) || (n == 2)) {
6 return (1);
7 }
8 else {
9 return (fibonacci(n − 1) + fibonacci(n − 2));
10 }
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Programa principal:
1 //
2 // Numero de Fibonacci (recursivo) − Programa principal
3 //
4 int main() {
5 int n;
6
7 printf(”Entre a ordem do elemento desejado: ”);
8 scanf(”%d”,&n);
9 printf(”O numero de Fibonacci e %d:\n”, fibonacci(n));
10 return 0;
11 }
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 09
Problema do Cavalo:
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 09
O Problema do Cavalo (ou Passeio do Cavalo) e´ um problema
matema´tico envolvendo o movimento da pec¸a do cavalo no
tabuleiro de xadrez. Um cavalo e´ colocado no tabuleiro vazio e,
seguindo as regras do jogo, precisa passar por todas as casas
exatamente uma vez em movimentos consecutivos.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 09
Apo´s ser colocado numa posic¸a˜o qualquer (i , j), com 1 ≤ i , j ≤ 8,
de tabuleiro de xadrez inicialmente vazio, o cavalo devera´ percorrer
todas as demais casas, exatamente uma vez, em movimentos
consecutivos.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 09
Pesquise sobre os poss´ıveis algoritmos – iterativos e recursivos –
para resolver o Problema do Cavalo e implemente pelo menos um
deles.
Pense na seguinte generalizac¸a˜o: e se o tabuleiro puder ter
qualquer tamanho n × n, com n ∈ N∗?
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 10
Problema da Rainha:
Elizabeth II (1926 - . . . ), Rainha do Reino Unido.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 10
O Problema da Rainha e´ um problema matema´tico envolvendo a
colocac¸a˜o de OITO rainhas no tabuleiro de xadrez. Todas as
rainhas devem ser colocadas de maneira tal que nenhuma delas
seja capaz de capturar outra.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Escrevendo Func¸o˜es Recursivas
Exemplo 10
Pesquise sobre os poss´ıveis algoritmos – iterativos e recursivos –
para resolver o Problema da Rainha e implemente pelo menos um
deles.
Pense na seguinte generalizac¸a˜o:
e se o tabuleiro puder ter qualquer tamanho n × n, com n ∈ N∗,
devendo-se, portanto, serem inseridas n rainhas?
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Vantagens e Desvantagens
Como e´ comum em Computac¸a˜o, nada e´ perfeito:
O uso de recursividade apresenta vantagens e desvantagens de
acordo com o vie´s que se analise.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Vantagens e Desvantagens
Vantagens
Em geral, o co´digo recursivo e´ mais fa´cil de escrever/ler que o
iterativo correspondente;
Algumas situac¸o˜es sa˜o naturalmente recursivas e, portanto,
expressa´-las recursivamente e´ mais simples.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Vantagens e Desvantagens
Vantagens
Algumas estruturas sa˜o naturalmente recursivas:
Listas encadeadas;
A´rvores bina´rias.
Problemas naturalmente recursivos:
Deslocamento em listas encadeadas;
Caminhamento em a´rvores bina´rias;
Avaliac¸a˜o de expresso˜es.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Vantagens e Desvantagens
Desvantagens
As func¸o˜es recursivas sa˜o geralmente mais lentas que as
func¸o˜es iterativas correspondentes;
Recursa˜o excessiva pode fazer com que haja um estouro da
pilha de execuc¸a˜o;
A`s vezes, cada chamada de func¸a˜o gera duas ou mais
chamadas recursivas nesse n´ıvel.
E´ preciso ter muito cuidado ao escrever func¸o˜es recursivas,
pois elas podem ser complicadas.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Saiba Mais...
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Saiba Mais...
Livros
1 CORMEN, Thomas H. et al., Algoritmos (Traduc¸a˜o da 2a
edic¸a˜o norte-americana – SOUZA, Vandenberg D. de), Rio de
Janeiro:Elsevier, 2002, 934pp.
2 SZWARCFITER, Jayme L. e MARKEZON, Lilian. Estruturas
de dados e seus algoritmos, Rio de Janeiro:LTC, 1994, 326pp;
3 TANENBAUM, Aaron A. et al., Estruturas de dados usando C
(Traduc¸a˜o – SOUZA, Tereza Cristina F. de), Sa˜o
Paulo:Makron Books, 1995, 904pp.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
Introduc¸a˜o
Tipos de Recursividade
Escrevendo Func¸o˜es Recursivas
Vantagens e Desvantagens
Saiba Mais...
Saiba Mais...
Outros
1 websites que tratam sobre o tema;
2 lista de exerc´ıcios publicada na a´rea da disciplina na
Plataforma EaD-INF/UFG e/ou Sharif Judge System do
INF/UFG.
Wanderley de Souza Alencar wanderley@inf.ufg.br AED1: Aula 02
	Introdução
	Tipos de Recursividade
	Escrevendo Funções Recursivas
	Vantagens e Desvantagens
	Saiba Mais...

Continue navegando