engenharia de controle e automaÇÃo - ct -...

16
Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos Iniciais Aula 04 Prof. Rafael Concatto Beltrame [email protected] DPEE 1038 – Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

Upload: vanxuyen

Post on 22-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

Engenharia de CONTROLE e AUTOMAÇÃO

Estrutura de Dados Conceitos Iniciais

Aula 04

Prof. Rafael Concatto [email protected]

DPEE 1038 –

Estrutura de Dados para AutomaçãoCurso de Engenharia de Controle e Automação

Universidade Federal de Santa Maria

Page 2: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

2Prof. Rafael Concatto Beltrame

Recursividade–

Definição

A função fatorial–

A sequência de Fibonacci

Sumário

Page 3: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

3Prof. Rafael Concatto Beltrame

Um procedimento recursivo é

aquele que contém, em sua  descrição, uma ou mais chamadas a si mesmo

Todo o procedimento deve possuir uma chamada externa–

Em um procedimento não‐recursivo,todas as chamadas são externas

A [quase] todo procedimento recursivocorresponde um outro não‐recursivo

Recursividade

Definição

Page 4: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

4Prof. Rafael Concatto Beltrame

Dado um inteiro positivo n, o fatorial de n

é

definido como o  produto de todos os inteiros entre n

e 1

Exemplo: 5! = 5 * 4 * 3 * 2 * 1 = 120–

Por definição: 0! = 1

Algoritmo

A função fatorial

n! = 1, se n == 0n! = n * (n-1) * (n-2) * ... * 1, se n > 0

0! = 11! = 12! = 2 * 13! = 3 * 2 * 1...

Page 5: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

5Prof. Rafael Concatto Beltrame

Algoritmo em C –

Método iterativo

Com repetição explícita de um processo

Observar que o fatorial pode, também, ser escrito–

Método recursivo

Chamada a si mesmo

A função fatorial

fatorial = 1;

for (x = n; x > 0; x--)fatorial = fatorial * x;

0! = 11! = 1 * 0!2! = 2 * 1!3! = 3 * 2!...

n! = 1, se n == 0n! = n * (n-1)!, se n > 0

Page 6: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

6Prof. Rafael Concatto Beltrame

Uma função recursiva exige o conhecimento do resultado  anterior

Cada caso é reduzido a um caso mais simples até

a definição inicial

A função fatorial

1)

5! = 5*4!2)

4! = 4*3!

3)

3! = 3*2!4)

2! = 2*1!

5)

1! = 1*0!6)

0! = 1

Page 7: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

7Prof. Rafael Concatto Beltrame

Cada função “interna”

tem um conjunto local de variáveis–

Podem possuir o mesmo nome

Mas não são vistas

pela função “externa”–

As variáveis ficam, então, armazenadas na “pilha” do sistema

A função fatorial

Fatorial (5)5 * Fatorial (5 -

1)

4 * Fatorial (4 -

1)3 * Fatorial (3 -

1)

2 * Fatorial (2 -

1)1 * Fatorial (1 -

1)

1

Page 8: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

8Prof. Rafael Concatto Beltrame

A função fatorial em C

A função fatorial

int fact(n) // Função fatorialint n;

{int x, y;

if

(n == 0) // Condição de saídareturn(1);

else

{x = n –

1;

y = fact(x); // Chamada recursiva

return(n * y); // Ponto de retorno}

}

Page 9: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

9Prof. Rafael Concatto Beltrame

A função fatorial

printf("%d", fact(4));

n x y

4 – –

n x y

34

–3 –

n x y

234

–23

–––

n x y

1234

–123

––––

n x y

01234

–123

–––––

n x y

1234

0123

1–––

n x y

234

123

1––

n x y

34

23

2–

n x y

4 3 6

n x y n x y

**

*

fact(4) fact(3) fact(2) fact(1) fact(0)

y=fact(0) y=fact(1) y=fact(2) y=fact(3) printf("%d", fact(4))

*

Page 10: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

10Prof. Rafael Concatto Beltrame

Cada elemento n

é a soma dos dois elementos anteriores (n

– 2) e (n

– 1)

Exemplo: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Algoritmo recursivo

A sequência de Fibonacci

fib(n) = n, se n == 0 ou n == 1fib(n) = fib(n-2) + fib(n-1), se n >= 2

fib(4) = fib(2) + fib(3)= fib(0)

+ fib(1)

+ fib(3)

= 0 + 1 + fib(1)

+ fib(2)= 0 + 1 + 1 + fib(0)

+ fib(1)

= 0 + 1 + 1 + 0 + 1= 3

Page 11: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

11Prof. Rafael Concatto Beltrame

Aplicações–

Matemática:

máximo divisor comum (MDC)

Informática:

computação paralela–

Estudo de sistemas biológicos

A sequência de Fibonacci

Page 12: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

12Prof. Rafael Concatto Beltrame

Observar que a sequencia de Fibonacci

Difere da definição recursiva de fatorial–

que fib( )

refere‐se a si mesma por duas vezes

Ocorre uma grande redundância computacional•

No exemplo anterior, fib(1) é calculada três vezes

Alternativa:

“lembrar”

dos valores anteriores da série

A sequência de Fibonacci

Page 13: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

13Prof. Rafael Concatto Beltrame

Implementação usando método iterativo–

Nesse caso, mais eficiente que o recursivo

por evitar repetição de 

cálculos

A sequência de Fibonacci

if

(n

<= 1) // Se 0 ou 1

return(n);

low_fib

= 0; // Números anteriores

high_fib

= 1; // da série

for (i = 2; i <= n; i++) { // Método iterativox = low_fib;low_fib

= high_fib;

high_fib

= x + low_fib;

}return(high_fib);

Page 14: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

14Prof. Rafael Concatto Beltrame

Não deve gerar uma sequência infinita de chamadas a si  mesmo

Para, no mínimo, um argumento, a função recursiva f

() deve ser  definida de modo a não envolver f () novamente

Deve existir uma “saída”

da sequência de chamadas recursivas

Saídas•

Fatorial

0! = 1

Sequência de Fobonacci

fib(0) = 0; fib(1) = 1;

Propriedades dos Algoritmos Recursivos

Page 15: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

15Prof. Rafael Concatto Beltrame

Iteração–

Cada uma das repetições de um comando de é devida ao emprego de 

um laço–

Diversos problemas resolvidos de forma recursiva podem ser 

resolvidos de forma iterativa (e vice‐versa)

Chamadas recursivas

devem salvar o “contexto”

do programa –

O “contexto”

precisa ser recuperado

após a execução de cada 

chamada recursiva–

O programa deve retornar imediatamente após ao ponto da chamada

recursiva–

O conteúdo das variáveis

precisa ser recuperado (salvos na pilha)

Revisão: Recursão versus

Iteração

Page 16: Engenharia de CONTROLE e AUTOMAÇÃO - CT - UFSMcoral.ufsm.br/beltrame/arquivos/disciplinas/graduacao_estrutura_de... · Engenharia de CONTROLE e AUTOMAÇÃO Estrutura de Dados Conceitos

1/5

16Prof. Rafael Concatto Beltrame

problemas que não podem ser resolvidos de forma  iterativa

Percorrer uma árvore

de dados para encontrar um elemento 

A recursão é muito útil na resolução de diversos problemas  que possam se beneficiar do “dividir‐para‐conquistar”

Ordenação por meio de quicksort

ou mergesort–

Diversas técnicas de busca em grafos

Revisão: Recursão versus

Iteração