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

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

Recursão.

Apresentações semelhantes


Apresentação em tema: "Recursão."— Transcrição da apresentação:

1 Recursão

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: 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛− 𝑠𝑒 𝑛>1

3 Fatorial 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0
𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛− 𝑠𝑒 𝑛>0 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 Função Iterativa

4 Fatorial 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0
𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛− 𝑠𝑒 𝑛>0 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 5! = 5 * 4! 2 4! = 4 * 3! 3 3! = 3 * 2! 4 2! = 2 * 1! 5 1! = 1 * 0! 6 0! = 1 6’ 0! = 1 5’ 1! = 1 * 0! = 1 * 1 = 1 4’ 2! = 2 * 1! = 2 * 1 = 2 3’ 3! = 3 * 2! = 3 * 2 = 6 2’ 4! = 4 * 3! = 4 * 6 = 24 1’ 5! = 5 * 4! = 5 * 24 = 120

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

7 Fatorial 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 1 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛−1 𝑠𝑒 𝑛>0 0! = 1
𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛 = 𝑠𝑒 𝑛=0 𝑛 ∗𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 𝑛− 𝑠𝑒 𝑛>0 0! = 1 1! = 1 * 0! 2! = 2 * 1! 3! = 3 * 2! 4! = 4 * 3! 5! = 5 * 4! Função Recursiva Função Recursiva

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

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

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

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

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

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

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

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

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

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

18 Recursão e a Pilha de Execução (stack)
int x = fatorial(4); Retorno 24 X

19 Recursão e a Pilha de Execução (stack)
int x = fatorial(4); X 24

20 Elementos de uma função recursiva
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 recursiva propriamente dita ou passo de recursão: Deve resolver uma instância menor do mesmo problema Processamento de apoio ou processamento complementar: Demais processamentos que acompanham e/ou utilizam o que resulta da chamada recursiva

21 Elementos de uma função recursiva
Exemplo: Função Recursiva

22 Elementos de uma função recursiva
Exemplo: Condição de Parada Função Recursiva

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

24 Elementos de uma função recursiva
Exemplo: Processamento de apoio Função Recursiva

25 Importante Se não existir o caso base (condição de parada), o programa entra em loop infinito 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)

26 Importante Se não existir o caso base (condição de parada), o programa entra em loop infinito 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)

27 Fibonacci O número de Fibonacci Fn para n>=0 é definido da seguinte maneira: Função Recursiva Exercício 01

28 Exercício 2 O que faz o programa abaixo? Justifique! 

29 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.

30 Torre de Hanói Estado inicial: Objetivo: Restrição:
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

31 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: A C B 1 2 3

32 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: A C B 1 3 2

33 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: A C B 1 3 2

34 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: A C B 1 2 3 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?

35 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: A C B 1 2 3

36 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: A C B 2 3 1 Movimento = 1 Mova o disco 1 do pino A para o pino B

37 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: A C B 3 2 1 Movimento = 2 Mova o disco 2 do pino A para o pino C

38 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: A C B 1 3 2 Movimento = 3 Mova o disco 1 do pino B para o pino C

39 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: A C B 1 3 2 Movimento = 4 Mova o disco 3 do pino A para o pino B

40 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: A C B 3 1 2 Movimento = 5 Mova o disco 1 do pino C para o pino A

41 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: A C B 2 3 1 Movimento = 6 Mova o disco 2 do pino C para o pino B

42 Conseguiu mover os 3 discos com o mínimo de movimentos
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: Quantidade mínima de movimentos A C B 1 2 M = 𝟐 𝒏 −𝟏 3 Número de discos Movimento = 7 PARABÉNS! Conseguiu mover os 3 discos com o mínimo de movimentos Mova o disco 1 do pino A para o pino B

43 Torre de Hanói

44 Torre de Hanói

45 Torre de Hanói

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

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

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


Carregar ppt "Recursão."

Apresentações semelhantes


Anúncios Google