58
1 Aula 05: - Recursão (parte 1) MCTA028 Programação Estruturada Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-20108

Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

1

Aula 05:

- Recursão (parte 1)

MCTA028 – Programação Estruturada

Prof. João Henrique Kleinschmidt

Material elaborado pelo prof. Jesús P. Mena-Chalco

3Q-20108

Page 2: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

Recursão:Se você ainda não entendeu;Ver: "Recursão".

Page 3: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt
Page 4: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

4

Anuncio de cacão com uma imagem recursiva.

Efeito Droste

Page 5: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt
Page 6: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

6

Recursão

O conceito de recursão é de fundamental importância em

computação!

Muitos problemas computacionais têm a seguinte

propriedade:

Cada instância do problema contém uma instância menor do mesmo problema.

→ Dizemos que esses problemas têm

estrutura recursiva.

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.

Page 7: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

7

Recursão

Para resolver um tal problema é natural aplicar o seguinte

método:

Se a instância em questão é pequena:

→ Resolva-a diretamente

(use força bruta se necessário)

Senão

→ Reduza-a a uma instância menor do mesmo problema

→ Aplique o método à instância menor

e volte à instância original.

A aplicação do método produz um algoritmo recursivo.

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.

Page 8: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

A recursão pode ser infinita.Não esqueça de definir o caso base (condição de parada)

Fonte: http://en.wikipedia.org/wiki/Recursion

Page 9: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

https://oeis.org/

Page 10: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt
Page 11: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

11

Fatorial de um número

Page 12: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

12

Fatorial de um número

Considere a função fatorial (representado por n!)

para um número inteiro, n, não-negativo arbitrário

Page 13: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

13

Fatorial de um número

Número de vezes em que a função Fatorial é chamada?

Page 14: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

14

Fatorial de um número

Número de vezes em que a função Fatorial é chamada? n+1

Page 15: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

15

Fatorial → Primorial

O primorial de um número inteiro positivo n é o produto de todos os

primos menores ou iguais a n.

É denotado por n#

[LAB] Crie uma função recursiva que, dado um número inteiro positivo, devolva:

(a) o seu Primorial.

(b) o número de multiplicações necessárias para calcular seu primorial.

https://en.wikipedia.org/wiki/Primorial

Page 16: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

16

Somatório de números

Page 17: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

17

Um exemplo de somatória

Dados dois número inteiros, n e k, crie uma função iterativa

para calcular a seguinte somatória:

Page 18: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

18

Um exemplo de somatória

$ gcc somatoria.c -lm -o somatoria.exe

$ ./somatoria.exe

4

20

1102999460754

Page 19: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

19

Um exemplo de somatória

Dados dois número inteiros, n e k, crie uma função recursiva

para calcular a seguinte somatória:

Page 20: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

20

Um exemplo de somatória

Dados dois número inteiros, n e k, crie uma função recursiva

para calcular a seguinte somatória:

Page 21: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=4, k=99

Page 22: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=4, k=99

4⁹⁹ +

Page 23: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=2, k=993⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 24: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=2, k=993⁹⁹ +

n=1, k=992⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 25: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=2, k=993⁹⁹ +

n=1, k=992⁹⁹ +

n=0, k=991⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 26: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=2, k=993⁹⁹ +

n=1, k=992⁹⁹ +

01⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 27: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

n=2, k=993⁹⁹ +

1⁹⁹+02⁹⁹ +

01⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 28: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

n=3, k=99

2⁹⁹+1⁹⁹+03⁹⁹ +

1⁹⁹+02⁹⁹ +

01⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 29: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

3⁹⁹+2⁹⁹+1⁹⁹+0

2⁹⁹+1⁹⁹+03⁹⁹ +

1⁹⁹+02⁹⁹ +

01⁹⁹ +

n=4, k=99

4⁹⁹ +

Page 30: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

3⁹⁹+2⁹⁹+1⁹⁹+0

2⁹⁹+1⁹⁹+03⁹⁹ +

1⁹⁹+02⁹⁹ +

01⁹⁹ +

4⁹⁹+3⁹⁹+2⁹⁹+1⁹⁹+0

4⁹⁹ +

Page 31: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

3⁹⁹+2⁹⁹+1⁹⁹+0

2⁹⁹+1⁹⁹+03⁹⁹ +

1⁹⁹+02⁹⁹ +

01⁹⁹ +

4⁹⁹+3⁹⁹+2⁹⁹+1⁹⁹+0

4⁹⁹ +

Page 32: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

Um laço e um acumulador

Sem laço e sem acumulador?

Page 33: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

33

Matrioska

Page 34: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

34

Matrioska

Page 35: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

35

Função recursiva

Uma função recursiva é definida em seus próprios termos.

Toda função pode ser escrita como função recursiva sem o

uso de interação (laços).

Reciprocamente, qualquer função recursiva pode ser descrita

através de interações sucessivas.

Ingredientes:

Definição de casos bases (que não envolvem recursão)

Passos recursivos, com decremento na entrada, no sentido do caso base.

Page 36: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

36

Recursão

Para resolver um tal problema é natural aplicar o seguinte

método:

Se a instância em questão é pequena:

→ Resolva-a diretamente

(use força bruta se necessário)

Senão

→ Reduza-a a uma instância menor do mesmo problema

→ Aplique o método à instância menor

e volte à instância original.

A aplicação do método produz um algoritmo recursivo.

(*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008.

Page 37: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

37

Números de Fibonacci

Page 38: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

38

Números de Fibonacci

(*) fonte http://britton.disted.camosun.bc.ca/fibslide/jbfibslide.htm

Page 39: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

39

Números de Fibonacci

Page 40: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

40

Números de Fibonacci

Função é duplamente recursiva

(efetua mais de uma chamada a Fib

Page 41: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

41

Números de Fibonacci

Page 42: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

42

Números de Fibonacci

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Pensou na eficiência da abordagem recursiva?

Page 43: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

43

Números de Fibonacci

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (7)Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (8)Fib (7)

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (9)Fib (8)

Fib (7)

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (7)

Fib (6)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (5)

Fib (4)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)

Fib (2)

Fib (1)

Fib (0)

Fib (3)

Fib (2)

Fib (1)

Fib (0)

Fib (1)Qual o número de vezes que a função Fib é chamada?

Page 44: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

44

Números de Fibonacci

(*) fonte http://www.oxfordmathcenter.com/drupal7/node/487

Page 45: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

45

Número de dígitos binários

Page 46: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

46

Número de dígitos binários

Crie uma função que calcula o número mínimo de dígitos

binários para representar um número inteiro decimal positivo n.

128 é representado com, no mínimo, 8 dígitos binários

Page 47: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

47

Número de dígitos binários

Page 48: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

48

Número de dígitos binários

Número de vezes em que a função bin é chamada?

Page 49: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

49

Número de dígitos binários

Número de vezes em que a função bin é chamada?

Page 50: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

Recursividade é uma das coisas mágicas e interessantes em Lógica de Programação

Page 51: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

51

Atividade em aula

Page 52: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

52

Questão 1

Qual é o resultado da execução das seguintes funções para

n=5?

Resposta de conta1 para n=5

5

4

3

2

1

Resposta de conta2 para n=5

1

2

3

4

5

Page 53: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

53

Questão 2

Indique o que devolvem as funções F1 e F2 para valores de: a=2, k=5.

Construa sua representação matemática recursiva.

Descreva em português o que calcula cada função.

Ambas as funções calculam a^k .

Para a=2, e b=5 a função devolve 32.

F2 é mais eficiente!

Page 54: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

54

Questão 3

Descreva em português o que calcula a função M.

Qual o número total de comparações?

A função M, dada um vetor v[0,…,n-1] de n

elementos devolve o menor valor contido em v.

Número de comparações = n

Page 55: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

55

Questão 4

Escreva uma versão iterativa da função M.

Versão iterativa

Page 56: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

56

Recursão

Uma função recursiva é aquela que se chama a si mesma

(obrigatoriamente)?

Page 57: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

57

Recursão

Uma função recursiva não necessariamente é aquela que se chama a si mesma

F1(...) → F2(...) → F3(...) → …. → F1(….)

Page 58: Aula 05: - Recursão (parte 1)professor.ufabc.edu.br/.../prog2018/aula_05_prog2018.pdf1 Aula 05: - Recursão (parte 1) MCTA028 –Programação EstruturadaProf. João Henrique Kleinschmidt

58

Análise de algoritmos recursivos

Para fazer a análise é necessário obter a relação de

recorrência.

A fórmula fechada (resolução) da recorrência pode ser obtida

por diferentes abordagens, por exemplo:

Árvore de recorrência

Método mestre

Funções geradoras