A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Algoritmo e Estrutura de Dados I

Apresentações semelhantes


Apresentação em tema: "Algoritmo e Estrutura de Dados I"— Transcrição da apresentação:

1 Algoritmo e Estrutura de Dados I
Aulas 17 – Recursividade Márcia Marra

2 Recursividade Simplificam a solução de alguns problemas
Geralmente deixam o código mais conciso São mais lentas que as funções iterativas Erros na implementação podem levar a “estouro” de pilha Exemplos clássicos: Cálculo de fatorial; Série de Fibonacci; Jogo da Torre de Hanoi

3 Fatorial Ex: Fatorial de 4

4 Fatorial - Solução #include <stdio.h> int fat (int n) {
if ( n =0) return 1; else return n * fat (n-1); } int main() { int num; printf("\nDigite um valor para n: "); scanf("%d", &num); printf("\nO fatorial de %d é %d", num, fat(num)); return 0;

5 Execução

6 Fibonacci A série de Fibonacci é formada de maneira que o elemento seguinte é composto pela soma dos dois elementos anteriores. 1, 1, 2, 3, 5, 8, 13, Fib (0) = 0 Fib (1) = 1 Fib (n) = Fib (n-1) + Fib (n-2)

7 Fibonacci - Solução #include <stdio.h> int fib (int n) {
if ( n==0) return 0; else if (n==1) return 1; else return fib(n-1)+ fib(n-2); } int main() { int num; printf("\nEntre com um valor para n: "); scanf("%d", &num); printf("\nFibonacci é %d", fib(num)); return 0;

8 Execução

9 Torre de Hanoi Considere três hastes, A, B e C.
Na haste A encontram-se n discos, com tamanhos diferentes, arrumados do menor maior, de cima baixo; Deve-se passar todos os discos da haste A para a haste B, usando a haste C como auxiliar e seguindo algumas regras.

10 Torre de Hanoi Regras do Jogo:
Somente um disco pode ser movido de cada vez. Nenhum disco pode ser colocado sobre um disco menor. Qualquer disco pode ser movido de qualquer haste para qualquer outra haste, desde que respeitada a regra 2.

11 Torre de Hanoi - Recursividade
Suponha 4 discos, como no desenho abaixo. Monte a pilha de execução para este exemplo.

12 Torre de Hanoi – pilha de execução
Disco 1 de A para C Disco 2 de A para B Disco 1 de C para B Disco 3 de A para C Disco 1 de B para A Disco 2 de B para C Disco 4 de A para B Disco 2 de C para A Disco 3 de C para B

13 Torre de Hanoi - Solução
#include <stdio.h> int torre (int disco, char de, char para, char aux){ if (disco == 1) printf ("\nMover disco %d da torre %c para a torre %c", disco, de, para); else { torre (disco-1, de, aux, para); printf ("\nMover disco %d da torre %c para a torre %c", disco, de, para); torre (disco-1, aux, para, de); } return(0);

14 Torre de Hanoi - Solução
int main () { int num; printf ("Digite a quantidade de discos da torre A: "); scanf ("%d", &num); torre (num, 'A', 'B', 'C'); return(0); }

15 Execução

16 Execução 2

17 Teste Surpresa Use a função puzzle abaixo para responder as perguntas:
int puzzle(int base, int limit) { //base and limit are nonnegative numbers if ( base > limit ) return -1; else if ( base == limit ) return 1; else return base * puzzle(base + 1, limit); } Identifique os casos base da função puzzle(); Identifique o caso recursivo da função puzzle(); Mostre a pilha de execução e o que será impresso pelas seguintes chamadas: printf(“%d\n”, puzzle(14,10)); printf(“%d\n”, puzzle(4,7)); printf(“%d\n”, puzzle(0,0));


Carregar ppt "Algoritmo e Estrutura de Dados I"

Apresentações semelhantes


Anúncios Google