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

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

MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014.

Apresentações semelhantes


Apresentação em tema: "MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014."— Transcrição da apresentação:

1 MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014

2 Recursão Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Exemplo Cálculo do fatorial de um número:

3 Fatorial 0! = 1 1! = 1 * 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1 Função Iterativa

4 Fatorial 0! = 1 1! = 1 * 1 2! = 2 * 1 3! = 3 * 2 * 1 4! = 4 * 3 * 2 * 1 5! = 5 * 4 * 3 * 2 * 1 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4!

5 Fatorial 1 1 5! = 5 * 4! 2 2 4! = 4 * 3! 3 3 3! = 3 * 2! 4 4 2! = 2 * 1! 5 5 1! = 1 * 0! 6 6 0! = 1 6’ 6’ 0! = 1 5’ 5’ 1! = 1 * 0! = 1 * 1 = 1 4’ 4’ 2! = 2 * 1! = 2 * 1 = 2 3’ 3’ 3! = 3 * 2! = 3 * 2 = 6 2’ 2’ 4! = 4 * 3! = 4 * 6 = 24 1’ 1’ 5! = 5 * 4! = 5 * 24 = 120

6 Fatorial 1 1 5! = 5 * 4! 2 2 4! = 4 * 3! 3 3 3! = 3 * 2! 4 4 2! = 2 * 1! 5 5 1! = 1 * 0! 6 6 0! = 1 120

7 Fatorial 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! Função Recursiva Função Iterativa

8 Recursão e a Pilha de Execução (stack) Supõe que façamos int x = fatorial(4); int x = fatorial(4); X Função Recursiva

9 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n

10 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n

11 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n fatorial(2) 2 n

12 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n fatorial(2) 2 n fatorial(1) 1 n

13 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n fatorial(2) 2 n fatorial(1) 1 n fatorial(0) 0 n

14 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n fatorial(2) 2 n fatorial(1) 1 n 1

15 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n fatorial(2) 2 n 1

16 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n fatorial(3) 3 n 2

17 4 Recursão e a Pilha de Execução (stack) fatorial(4) X Retorno n 6

18 24 Recursão e a Pilha de Execução (stack) X Retorno Supõe que façamos int x = fatorial(4); int x = fatorial(4); Função Recursiva

19 Recursão e a Pilha de Execução (stack) X 24 Supõe que façamos int x = fatorial(4); int x = fatorial(4); Função Recursiva

20 Elementos de uma função recursiva Condição de paradacaso basecaso trivial Condição de parada ou caso base ou caso trivial: É a parte da definição da função que não faz chamada recursiva Chamada recursivapasso de recursão: Chamada recursiva propriamente dita ou passo de recursão: Deve resolver uma instância menor do mesmo problema Processamento de apoioprocessamento complementar Processamento de apoio ou processamento complementar: Demais processamentos que acompanham e/ou utilizam o que resulta da chamada recursiva

21 Exemplo: Condição de Parada Elementos de uma função recursiva

22 Exemplo: Chamada recursiva a uma instância menor Elementos de uma função recursiva

23 Exemplo: Processamento de apoio Elementos de uma função recursiva

24 Importante caso base Se não existir o caso base (condição de parada), o programa entra em loop infinito chamada recursivaa uma instância menor Se a chamada recursiva não for aplicada a uma instância menor do problema, o programa entra em um loop infinito Se um função recursiva ficar chamando a si mesma indefinidamente (num loop infinito) o programa rapidamente para por “estouro da pilha” (stack overflow)

25 Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira:

26 Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira: Função Recursiva Exercício 01 – Faça uma função recursiva para calcular o número de Fibonacci.

27 Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira: Função Recursiva Exercício 01 Faça um programa para imprimir a sequência de Fibonacci.

28 Sequência de Fibonacci

29 Exercício 2 O que faz o programa abaixo? Justifique! O que faz o programa abaixo? Justifique! Processamento de apoio?

30 Torre de Hanói A lenda diz que num templo perdido na Ásia uns monges estão tentando mover 64 discos de tamanhos diferentes de um pino para outro, usando um terceiro como auxiliar, de tal forma que: Nunca um disco maior é colocado sobre um menor De acordo com a lenda o mundo se acaba no momento que esta tarefa é completada.

31 Torre de Hanói Estado inicial: pilha de discos ordenados pelo raio Objetivo: transferir a pilha de discos para uma das outras pilhas vazias Restrição: Mover um disco por vez Um disco de raio maior não pode estar sobre um disco de raio menor

32 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: 3 2 1

33 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: 3 2 1

34 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: 3 2 1

35 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Ok, mas só podemos mover um disco por vez Como a pilha com os 2 discos menores foi parar no pino C, e depois no pino B?

36 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: 3 2 1

37 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 1 Mova o disco 1 do pino A para o pino B

38 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 2 Mova o disco 2 do pino A para o pino C

39 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 3 Mova o disco 1 do pino B para o pino C

40 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 4 Mova o disco 3 do pino A para o pino B

41 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 5 Mova o disco 1 do pino C para o pino A

42 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: Movimento = 6 Mova o disco 2 do pino C para o pino B

43 ACB Torre de Hanói Se o valor fornecido para o programa for 3, então a sequência de chamadas e as saídas geradas são: PARABÉNS! Conseguiu mover os 3 discos com o mínimo de movimentos Movimento = 7 Quantidade mínima de movimentos Número de discos Mova o disco 1 do pino A para o pino B

44 Torre de Hanói Para solucionar um Hanói de 3 discos, são necessários 7 movimentos Para solucionar um Hanói de 4 discos, são necessários 15 movimentos Para solucionar um Hanói de 5 discos, são necessários 31 movimentos Para solucionar um Hanói de 6 discos, são necessários 63 movimentos Para solucionar um Hanói de 7 discos, são necessários 127 movimentos Para solucionar um Hanói de 15 discos, são necessários movimentos Para solucionar um Hanói de 64 discos, como diz a lenda, são necessários movimentos.

45 Tarefa Torre de Hanói Torre de Hanói Escrever um programa em C que calcula o movimento de n discos de acordo com as regras estabelecidas

46 Material Baseado em: Estrutura de Dados Usando C (Livro) Estrutura de Dados Usando C Slides do Prof. Daniel M. Martin


Carregar ppt "MC102 – Aula 26 Recursão Instituto de Computação Unicamp 04 de Dezembro de 2014."

Apresentações semelhantes


Anúncios Google