60
Recursividade, Tentativa e Erro Túlio Toffolo – www.toffolo.com.br Marco Antônio Carvalho [email protected] BCC402 – Aula 07 Algoritmos e Programação Avançada

Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Embed Size (px)

Citation preview

Page 1: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade, Tentativa e Erro Túlio Toffolo – www.toffolo.com.br Marco Antônio Carvalho – [email protected]

BCC402 – Aula 07

Algoritmos e Programação Avançada

Page 2: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Na aula anterior

•  Prova

2

Page 3: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Na aula de hoje

•  Técnicas básicas de contagem;

•  Tentativa e Erro;

•  Recursividade.

3

Page 4: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Problemas Combinatórios

•  Combinatória é a matemática do contar

•  Existem diversos problemas básicos de contagem que ocorrem repetidamente em ciência da computação e em programação.

•  Problemas Combinatórios são aqueles em que uma solução é a combinação de um subconjunto de elementos

•  São famosos por sua relação com a “esperteza” e insights;

•  Uma vez que se coloca o problema sob a perspectiva certa, a solução pode se tornar óbvia.

4

Page 5: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Problemas Combinatórios

•  O espaço de busca de um problema combinatório é o conjunto de todas as soluções possíveis, podendo ser restrito as soluções viáveis ou não;

•  Uma solução viável é uma solução completa, que atende aos requisitos do problema;

•  Uma solução inviável é uma solução incompleta ou mesmo uma solução nula.

5

Page 6: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Problemas Combinatórios

•  Ainda, podemos ter soluções equivalentes, ou seja, mais de uma solução viável par ao mesmo problema;

•  Alguns problemas possuem uma solução melhor que todas as outras, chamada de solução ótima.

6

Page 7: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Técnicas Básicas de Contagem

•  Basicamente, existem três regras básicas de contagem a partir das quais várias formas de contagem são geradas:

•  Regra da Soma;

•  Regra do Produto;

•  Regra de Inclusão-Exclusão.

7

Page 8: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Técnicas Básicas de Contagem

•  Regra da Soma:

•  Se há |A| possibilidades em um conjunto A e |B| possibilidades em um conjunto B, então há |A|+|B| possibilidades de A ou B ocorrerem, assumindo que os conjuntos possuem elementos distintos.

8

Page 9: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Técnicas Básicas de Contagem

•  Regra do Produto:

•  Se há |A| possibilidades em um conjunto A e |B| possibilidades em um conjunto B, então há |A|×|B| formas de combinar um elemento de A com um elemento de B.

9

Page 10: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Técnicas Básicas de Contagem

•  Regra da Inclusão-Exclusão:

•  A regra da soma é um caso especial da regra de Inclusão-Exclusão;

•  Normalmente, os elementos dos conjuntos podem ser repetidos, e portanto, induzirem ao erro de serem contados mais de uma vez;

•  |A U B| = |A| + |B| − |A ∩ B|;

•  Outra técnica poderosa é estabelecer bijeções

•  Mapeamento um-para-um entre elementos de diferentes conjuntos.

10

Page 11: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Estratégias de Projeto de Algoritmos

•  Existem diferentes maneiras de se projetar um algoritmo para solução de um determinado problema combinatório;

•  Ao projetar um algoritmo, pensamos no problema e em suas características

•  Que tipo de algoritmo teria melhor desempenho para este problema?

11

Page 12: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Estratégias de Projeto de Algoritmos

•  Ao tratarmos de problemas difíceis, como os NP-Completos, sabemos que não são conhecidas técnicas eficientes para a sua resolução

•  Então, podemos analisar as características da entrada para o problema para obter alguma vantagem no projeto de uma solução?

12

Page 13: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

TENTATIVA E ERRO

Page 14: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Tentativa e Erro, Força Bruta ou Busca Exaustiva é a estratégia mais trivial e intuitiva para solução de problemas

•  Consiste em enumerar todas as combinações possíveis para uma solução e avaliar se satisfazem ao problema

§ Escolhe a melhor das soluções, ou seja, a solução ótima.

•  Apesar de trivial em alguns casos, possui desempenho geralmente muito ruim.

14

Page 15: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Consideremos o Problema da Mochila:

•  Dada uma mochila com capacidade C, e n objetos com peso pi (i=1…n), o objetivo é preencher a mochila com o maior peso total, respeitando a capacidade C.

15

Page 16: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Suponha uma mochila com capacidade de 15 kg e objetos de peso 12 kg, 2 kg, 4 kg e 8 kg;

•  Este problema possui mais que uma solução ótima, ou seja, possui soluções ótimas equivalentes: •  12 kg + 2 kg;

•  8 kg + 2 kg + 4 kg.

•  Soluções viáveis seriam, entre outras: •  12 kg, 2 kg, 4 kg, 8 kg, 2kg + 4 kg, etc.

•  Uma solução inviável seria •  12 kg + 4 kg.

16

Page 17: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Um método baseado em tentativa e erro testaria todas as combinações entre elementos checando:

•  Se a solução é viável;

•  Se a solução possui valor melhor que outra encontrada anteriormente.

•  Para determinar se uma solução é a melhor de todas desta forma, é necessário enumerar todas.

17

Page 18: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Consideremos agora, o problema de decifrar uma senha que contém apenas números:

•  Só existe uma solução ótima;

•  Não são consideradas soluções parciais.

18

Page 19: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Um método baseado em tentativa e erro:

•  Enumera todas as combinações dos números 0-9 para cada dígito da senha;

•  Quanto maior a senha, pior o desempenho;

•  Poderia ser utilizado um método que levasse em consideração alguma estatística sobre composição de senhas e dar prioridade às mais prováveis.

19

Page 20: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Tentativa e Erro

•  Dependendo da característica do problema caímos em uma das situações para tentativa e erro:

•  Gerar todas as Combinações;

•  Gerar todos os Arranjos;

•  Gerar todas as Permutações.

20

Page 21: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

PERMUTAÇÃO, COMBINAÇÃO

E ARRANJO

Page 22: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Permutação

•  Dado um conjunto U com n elementos, uma permutação de seus elementos é uma ordenação dos mesmos;

•  A quantidade de permutações possíveis para n elementos é definida pelo fatorial da cardinalidade do conjunto

•  Ou seja n!;

•  Que equivale a n×(n-1) ×(n-2) ×…×1.

22

Page 23: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Permutação

•  Por exemplo, o conjunto U={1, 2, 3} de cardinalidade 3, possui 6 permutações:

•  1 2 3;

•  1 3 2;

•  2 1 3;

•  2 3 1;

•  3 1 2;

•  3 2 1.

23

Page 24: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

•  A geração de todas as permutações pode ser feita seguindo uma ordem lógica

•  Estabelecendo uma relação entre uma permutação e a próxima;

•  Desta forma, é possível numerar cada uma das permutações dentro da sequência gerada;

24

Page 25: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

•  Na linguagem C++ a função next_permutation() gera permutações de um vetor

•  Em ordem lexicográfica;

§ A partir de uma permutação, gera a próxima em ordem lexicográfica crescente e retorna true;

§ Caso não haja tal permutação, gera a menor permutação em ordem lexicográfica e retorna false;

§ Não gera permutações de repetições.

25

Page 26: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

26

Page 27: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

•  Como dito anteriormente, o número de permutações é fatorial no número de elementos

•  O que significa crescimento muito rápido.

•  Diferentes algoritmos de geração de permutações possuem velocidades diferentes

•  Muito depende da complexidade da relação entre uma permutação e a próxima.

•  Um algoritmo de bom desempenho é o Algoritmo de Trotter-Johnson.

27

Page 28: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

•  O algoritmo Trotter-Johnson (ou Steinhaus–Johnson–Trotter) gera permutações de troca mínima:

•  A partir de uma permutação, apenas dois elementos são trocados de lugar (i. e., transpostos) para gerar a próxima permutação.

1 2 3

1 3 2

3 1 2

3 2 1

2 3 1

2 1 3 28

Page 29: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Gerando Permutações

•  Curiosamente, Trotter (1962) e Johnson (1963) proporam o algoritmo e ambos levaram o crédito;

•  Porém, Donald Knuth, no terceiro volume do “The Art of Programming” diz que nem um nem outro.

•  Tocadores de sinos, segundo registrado por um livro antigo teriam desenvolvido o algoritmo.

29

Page 30: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Combinação

•  Dado um conjunto U com n elementos, uma combinação sem repetição indica quantos subconjuntos diferentes de s elementos do conjunto U podem ser formados, não considerando a ordem dos elementos;

•  Denotada por

30

Csn =

n!s!(n− s)!

Page 31: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Combinação

•  Por exemplo, o conjunto U = {A, B, C, D} possui 6 subconjuntos de dois elementos. São eles:

•  AB, AC, AD, BC, BD, CD.

31

Page 32: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Arranjo

)!(!rnnAnr −

=

32

•  Dado um conjunto U com n elementos, um arranjo simples indica quantas ordenações dos elementos de U tomados r a r são possíveis, em que se diferencia a ordem dos elementos, sem repetições;

•  Denotada por

Page 33: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Arranjo

rnr nA =

33

•  Dado um conjunto U com n elementos, um arranjo com repetições indica quantas ordenações dos elementos de U tomados r a r são possíveis, em que se diferencia a ordem dos elementos, com repetições;

•  Denotada por

Page 34: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Arranjo

•  Por exemplo, o conjunto U = {A, B, C, D} possui 12 arranjos simples e 16 arranjos com repetição

•  AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC;

•  AA, AB, AC, AD, BA, BB, BC, BD, CA, CB, CC, CD, DA, DB, DC, DD.

34

Page 35: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Geração de Subconjuntos

•  Através de backtracking, é possível gerar todos os subconjuntos e também todas as permutações;

•  Tema de uma aula futura (ou do fim desta aula?)

35

Page 36: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

RECURSIVIDADE

Page 37: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Uma função pode chamar quaisquer outras funções, inclusive a si mesma

•  Uma função que faz chamadas a si própria é dita recursiva.

•  É um conceito poderoso, pois define conjuntos infinitos com instruções finitas.

37

Page 38: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

38

Recursividade

•  Vantagem

•  Redução do tamanho do código fonte.

•  (Des)Vantagem

•  Permite descrever algoritmos de forma mais clara e concisa.

•  Desvantagens

•  Redução do desempenho de execução devido ao tempo para gerenciamento de chamadas;

•  Dificuldades na depuração de programas recursivos, especialmente se a recursão for muito profunda.

Page 39: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

39

Recursividade

•  Usa-se uma pilha para armazenar os dados usados em cada chamada de uma função que ainda não terminou;

•  Todos os dados não globais são armazenados na pilha, informando o resultado corrente;

•  Quando uma ativação anterior prossegue, os dados da pilha são recuperados.

Page 40: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

40

Page 41: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

41

Recursividade

•  Por exemplo, consideremos a definição de uma função que calcula o fatorial de um número n:

•  Não recursiva

§  n! = 1 para n=0;

§  n! = 1×2 ×3 ×4 ×… ×n para n >= 1;

•  Recursiva

§  n! = 1 para n=0;

§  n! = n ×(n-1)! para n >= 1.

Page 42: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

42

Recursividade

Page 43: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Primeira chamada

43

5*

Page 44: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Segunda chamada

44

4*

5*

Page 45: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Terceira chamada

45

3*

4*

5*

Page 46: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Quarta chamada

46

2*

3*

4*

5*

Page 47: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Quinta chamada

47

1

2*

3*

4*

5*

Page 48: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Primeiro retorno

48

1

2*

3*

4*

5*

Page 49: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Segundo retorno

49

2*1

3*

4*

5*

Page 50: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Terceiro retorno

50

3*2

4*

5*

Page 51: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Quarto retorno

51

4*6

5*

Page 52: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Quinto e último retorno

•  Por fim, a função retorna 120, o resultado de 5!

52

5*24

Page 53: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  O projeto de uma função recursiva exige considerarmos duas partes cruciais:

•  Critério de parada;

•  Operações e chamada recursiva.

53

Page 54: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Funções recursivas introduzem a possibilidade de Loop Infinito

•  É fundamental que a chamada recursiva a uma função A esteja sujeita a uma condição C, a qual se torna satisfeita em algum momento da computação.

•  Se não existisse a condição n=0, no exemplo anterior, quando a função terminaria?

•  Critério de parada

•  Faz com que o procedimento termine !!!

54

Page 55: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

55

Page 56: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Para projetar um algoritmo recursivo

•  Defina pelo menos um caso básico (condição de terminação);

•  Quebre o problema em problemas menores, definindo o(s) caso(s) com recursão(ões);

•  Fazer o teste de finitude, isto é, certificar-se de que as sucessivas chamadas recursivas levam obrigatoriamente, e numa quantidade finita de vezes, ao(s) caso(s) básico(s).

•  Uma dica válida é o uso de variáveis globais quando possível, para evitar confusão na passagem de parâmetros.

56

Page 57: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Recursividade

•  Em comparação, versões iterativas são geralmente mais rápidas

•  Porém, existem problemas inerentemente recursivos

•  Percurso em árvores e grafos;

•  Algoritmos de divisão e conquista.

•  Em suma, a maioria dos algoritmos iterativos que usam pilhas tendem a ser modelados mais facilmente em versões recursivas;

•  Erros de implementação geralmente acarretam em estouro de pilha.

57

Page 58: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Eis o poder da recursão…

vetor = []def comb(n,r): global vetor if r > 0: for i in range(n): vetor.append(i) comb(n,r-1) vetor.pop() else: for v in vetor: print v, print

58

O que o código acima (em python) faz?

Page 59: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Na próxima aula

•  Divisão e Conquista.

59

Page 60: Recursividade, Tentativa e Erro - DECOM-UFOP · • Permite descrever algoritmos de forma mais clara e ... O que o código acima (em python) faz? Na próxima aula • Divisão e Conquista

Perguntas?