Buscar

12.recursao

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

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

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ê viu 3, do total de 8 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

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

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ê viu 6, do total de 8 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

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

Prévia do material em texto

Recursão 
Funções 
Conceito 
 Em C, como virtualmente em todo 
linguagem de programação, funções podem 
chamar a si mesmas, direta ou 
indiretamente. 
 Uma função é dita recursiva se em seu 
corpo a uma chamada (direta ou indireta) 
para si mesma. 
 
 
2 
Conceito 
 Recursão é o processo de definir algo em 
termos de si mesmo e é, algumas vezes, 
chamado de definição circular. 
3 
Exemplos 
1. char * gnu(int n) { 
2. static char buf[1024]; 
 
3. if (n == 0) 
4. strcpy(buf,"GNU"); 
5. else { 
6. gnu(n-1); 
7. strcat(buf," Not Unix"); 
8. } 
 
9. return buf; 
10. } 
 
4 
Exemplos 
1. char * gnu2(int n) { 
2. static char buf[1024]; 
 
3. if (n == 0) 
4. return "GNU"; 
5. else { 
6. char aux[1024]; 
 
7. strcpy(aux,gnu2(n-1)); 
8. sprintf(buf,"(%s %s)",aux,"Not Unix"); 
9. } 
 
10. return buf; 
11. } 
 
5 
Observações 
 Quando uma função chama a si mesma, 
novos parâmetros e variáveis locais - 
quando estas não são static - são alocados 
na pilha e o código da função é executado 
com essas novas variáveis. 
 No caso de variáveis locais static, todas as 
chamadas recursivas compartilham a 
mesma variável ! 
 
6 
Observações 
 Quando cada chamada recursiva retorna, 
as variáveis locais (não static) e os 
parâmetros são removidos da pilha e a 
execução recomeça do ponto da chamada à 
função dentro da função. 
 Ao escrever funções recursivas, você deve 
ter um comando if em algum lugar para 
forçar a função a retornar sem que a 
chamada recursiva seja executada mais 
uma vez ! 
7 
Atividade 1 - Hanoi 
 Escreva um programa em C, que simule o 
trabalho dos sacerdotes conforme descrito 
< 
http://www2.mat.ua.pt/rosalia/cadeiras/AD
A/THpaper.pdf > 
 Na lenda, os sacerdotes movem 64 discos. 
No seu programa, trabalhe com n discos, 
onde n é um número informado pelo 
usuário. Dica: usando recursão, o seu 
programa ficará bastante compacto. 
 
8

Outros materiais