Algoritmos e Estruturas de Dados I

Tamanho: px
Começar a partir da página:

Download "Algoritmos e Estruturas de Dados I"

Transcrição

1 Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin ([email protected]) Aula 10 (Baseada nos slides do Prof. André Balan)

2 Recursão

3 Recursão Da wikipedia: A recursão é o processo pelo qual passa um certo procedimento quando um dos passos do procedimento em questão envolve a repetição completa deste mesmo procedimento. Um procedimento que se utiliza da recursão é chamado recursivo. Também é dito recursivo qualquer objeto que seja resultado de um procedimento recursivo.

4 Uma imagem recursiva Foto: courtesia do Prof. Jim Bryan, Univ. of BC, Canada

5 Relações de recorrência Em Matemática, é comum definirmos sequências de números ou funções usando recursão Exemplo 1: função fatorial

6 Relações de recorrência Exemplo 2: seqüência de Fibonacci F 0 = 0, F 1 = 1, F 2 = 1, F 3 = 2, F 4 = 3, F 5 = 5...

7 Funções recursivas em C Uma função que, em sua própria definição, chama a si mesma Exemplo: int fatorial(int n) { if (n == 1) return 1; return (n * fatorial(n 1)); }

8 Recursão e a pilha de execução (stack) Supõe que façamos: int x = fatorial(4);

9 Recursão e a pilha de execução (stack) int x = fatorial(4); x

10 Recursão e a pilha de execução (stack) fatorial(4) n 4 retorno x

11 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) n 3 retorno n 4 retorno x

12 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

13 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) fatorial(2) fatorial(1) n 1 retorno n 2 retorno n 3 retorno n 4 retorno x

14 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) fatorial(2) fatorial(1) fatorial(0) n 0 retorno n 1 retorno n 2 retorno n 3 retorno n 4 retorno x

15 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) fatorial(2) fatorial(1) retorno 1 n 1 retorno n 2 retorno n 3 retorno n 4 retorno x

16 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) fatorial(2) retorno 1 n 2 retorno n 3 retorno n 4 retorno x

17 Recursão e a pilha de execução (stack) fatorial(4) fatorial(3) retorno 2 n 3 retorno n 4 retorno x

18 Recursão e a pilha de execução (stack) fatorial(4) retorno 6 n 4 retorno x

19 Recursão e a pilha de execução (stack) retorno 24 x

20 Recursão e a pilha de execução (stack) int x = fatorial(4); x 24

21 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

22 Elementos de uma função recursiva Exemplo: int fatorial(int n) { if (n == 0) return 1; return (n * fatorial(n 1)); }

23 Elementos de uma função recursiva Exemplo: condição de parada int fatorial(int n) { if (n == 1) return 1; return (n * fatorial(n 1)); }

24 Elementos de uma função recursiva Exemplo: chamada recursiva a uma instância menor int fatorial(int n) { if (n == 1) return 1; return (n * fatorial(n 1)); }

25 Elementos de uma função recursiva Exemplo: processamento de apoio int fatorial(int n) { if (n == 1) return 1; return (n * fatorial(n 1)); }

26 Importante: Se não existir o caso base (condição de parada), o programa entra em loop infinito

27 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 progrma 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)

28 Mais funções recursivas em C Exemplo: números de Fibonacci int F(int n) { if (n == 0 n == 1) return n; return F(n 1) + F(n 2); }

29 Mais funções recursivas em C Exemplo: calculando 2^k int pot2(int k) { if (n == 0) return 1; return 2 * pot2(k - 1); }

30 Recursão com vários parâmetros

31 Recursão com vários parâmetros Exemplo: deseja-se ir da esquina A para a esquina B no mapa abaixo. As ruas são todas de mão única como indicado pelas flechas. De quantas maneiras é possível fazer isso?

32 Recursão com vários parâmetros De quantas maneiras é possível fazer isso?

33 Recursão com vários parâmetros De quantas maneiras é possível fazer isso? Do ponto A pode-se ir para norte ou para leste

34 Recursão com vários parâmetros O número de rotas que escolhe ir para o norte é o número de rotas entre C e B

35 Recursão com vários parâmetros O número de rotas que escolhe ir para o leste é o número de rotas entre D e B

36 Recursão com vários parâmetros Digamos que o mapa tenha m x n quarteirões (no exemplo m = 5 e n = 7)

37 Recursão com vários parâmetros Digamos que o mapa tenha m x n quarteirões (no exemplo m = 5 e n = 7) Faremos uma função int conta_rotas(int m, int n);

38 Recursão com vários parâmetros int conta_rotas(int m, int n) { }

39 Recursão com vários parâmetros int conta_rotas(int m, int n) { if (m == 0 n == 0) return 1; }

40 Recursão com vários parâmetros int conta_rotas(int m, int n) { if (m == 0 n == 0) return 1; return conta_rotas(m 1, n) + conta_rotas(m, n 1); }

41 Recursão com vários parâmetros int conta_rotas(int m, int n) { if (m == 0 n == 0) return 1; return conta_rotas(m 1, n) + conta_rotas(m, n 1); } Simular chamada conta_rotas(3,3); na lousa.

42 Versão iterativa de funções recursivas Geralmente a versão iterativa é mais rápida (pois não involve o empilhamento dos argumentos da função, do endereço de retorno, e nem o desempilhamento desses dados após a função retornar) Exemplo: fatorial int fatorial(int n) { int r; for (r = 1; n > 0; r *= n --); return r; }

43 Versão iterativa de funções recursivas Algumas vezes a versão iterativa é muito mais rápida pois a solução recursiva mais natural faz cálculos replicados Exemplo: simular F(5) na lousa int F(int n) { if (n == 0 n == 1) return n; return F(n 1) + F(n 2); }

44 Versão iterativa de funções recursivas Eis a versão iterativa da função Fibonacci int F(int n) { int i, penultimo = 0, ultimo = 1, tmp; if (n == 0 n == 1) return n; for (i = 2; i <= n; i ++) { tmp = ultimo + penultimo; penultimo = ultimo; ultimo = tmp; } return ultimo; }

45 Problemas tipicamente recursivos Exemplo: Torre de Hanoi

46 Torre de Hanoi 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

47 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

48 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

49 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

50 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

51 Torre de Hanoi Ok, mas só podemos mover um disco por vez Como a pilha com os 2 discos menores foi parar na pilha auxiliar, e depois na pilha destino?

52 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

53 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

54 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

55 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

56 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

57 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

58 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

59 Torre de Hanoi 1 - origem 2 - auxiliar 3 - destino

60 Torre de Hanoi Vamos fazer um algoritmo recursivo hanoi(n, origem, destino, auxiliar) que escreve os movimentos a serem executados passo a passo (disco a disco)

61 Torre de Hanoi Q: Qual o caso base?

62 Torre de Hanoi Q: Qual o caso base? R: quando n = 1. hanoi(1, origem, destino, auxiliar) Nesse caso basta mover o (único) disco da pilha origem para a pilha destino

63 Torre de Hanoi hanoi(n, origem, destino, auxiliar) se n = 1 então print move disco de + origem + para + destino senão hanoi(n 1, origem, auxiliar, destino) print move disco de + origem + para + destino hanoi(n 1, auxiliar, destino, origem)

64 Torre de Hanoi hanoi(n, origem, destino, auxiliar) se n = 1 então print move disco de + origem + para + destino senão hanoi(n 1, origem, auxiliar, destino) print move disco de + origem + para + destino hanoi(n 1, auxiliar, destino, origem) Exercício: implementar a função hanoi em C

65 hanoi(3, 1, 3, 2); Torre de Hanoi Saída:

66 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); Torre de Hanoi Saída:

67 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); Torre de Hanoi Saída:

68 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi Saída: move de 1 para 3

69 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi Saída: move de 1 para 3

70 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 Torre de Hanoi Saída: move de 1 para 3 move de 1 para 2

71 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 hanoi(1, 3, 2, 1); Torre de Hanoi Saída: move de 1 para 3 move de 1 para 2

72 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 hanoi(1, 3, 2, 1); imprime move de 3 para 2 Torre de Hanoi Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2

73 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 hanoi(1, 3, 2, 1); imprime move de 3 para 2 Torre de Hanoi Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2

74 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 hanoi(1, 3, 2, 1); imprime move de 3 para 2 Torre de Hanoi Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2

75 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 imprime move de 1 para 2 hanoi(1, 3, 2, 1); imprime move de 3 para 2 Torre de Hanoi imprime move de 1 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3

76 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3

77 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3

78 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1

79 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1

80 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3

81 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 hanoi(1, 1, 3, 2); Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3

82 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 hanoi(1, 1, 3, 2); imprime move de 1 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3 move de 1 para 3

83 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 hanoi(1, 1, 3, 2); imprime move de 1 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3 move de 1 para 3

84 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 hanoi(1, 1, 3, 2); imprime move de 1 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3 move de 1 para 3

85 hanoi(3, 1, 3, 2); hanoi(2, 1, 2, 3); hanoi(1, 1, 3, 2); imprime move de 1 para 3 Torre de Hanoi imprime move de 1 para hanoi(1, 3, 2, 1); imprime move de 3 para 2 imprime move de 1 para 3 hanoi(2, 2, 3, 1); hanoi(1, 2, 1, 3); imprime move de 2 para 1 imprime move de 2 para 3 hanoi(1, 1, 3, 2); imprime move de 1 para 3 Saída: move de 1 para 3 move de 1 para 2 move de 3 para 2 move de 1 para 3 move de 2 para 1 move de 2 para 3 move de 1 para 3

86 Torre de Hanoi

87 Recursão Caso as chamadas recursivas sejam muito numerosas (o algoritmo entre em níveis de recursão muito altos) a pilha pode estourar (stack overflow) Nesse caso deve-se construir um algoritmo iterativo (usando a estrutura de dado pilha) para simular a recursão Toda recursão pode ser transformada num algoritmo iterativo por meio de pilhas Se a chamada recursiva vem no final (tail recursion) não é necessário o uso da pilha

88 Backtracking

89 Backtracking Algoritmos recursivos também são utilizados para resolver problemas utilizando a técnica de backtracking. Consiste em escolher um determinado caminho de computação ; se este caminho o levar a um beco sem saída, volte ao ponto imediatamente antes de escolher este caminho e a partir dali tente outro.

90 Backtracking Exemplo: Problema das 8 rainhas

91 Problema das 8 rainhas Vamos fazer backtracking para resolver o problema das 8 rainhas Para ser factível em aula, vamos considerar um problema simplificado...

92 Problema das 4 rainhas

93 Problema das 4 rainhas

94 Ok! Próxima linha Problema das 4 rainhas

95 Problema das 4 rainhas

96 Problema das 4 rainhas

97 Problema das 4 rainhas

98 Ok! Próxima linha Problema das 4 rainhas

99 Problema das 4 rainhas

100 Problema das 4 rainhas

101 Problema das 4 rainhas

102 Problema das 4 rainhas

103 Problema das 4 rainhas Falhou! Backtrack

104 Problema das 4 rainhas

105 Problema das 4 rainhas

106 Ok! Próxima linha Problema das 4 rainhas

107 Problema das 4 rainhas

108 Problema das 4 rainhas

109 Ok! Próxima linha Problema das 4 rainhas

110 Problema das 4 rainhas

111 Problema das 4 rainhas

112 Problema das 4 rainhas

113 Problema das 4 rainhas

114 Problema das 4 rainhas Falhou! Backtrack

115 Problema das 4 rainhas

116 Problema das 4 rainhas

117 Problema das 4 rainhas

118 Problema das 4 rainhas Falhou! Backtrack

119 Problema das 4 rainhas

120 Problema das 4 rainhas Falhou! Backtrack

121 Problema das 4 rainhas

122 Problema das 4 rainhas

123 Ok! Próxima linha Problema das 4 rainhas

124 Problema das 4 rainhas

125 Problema das 4 rainhas

126 Problema das 4 rainhas

127 Problema das 4 rainhas

128 Ok! Próxima linha Problema das 4 rainhas

129 Problema das 4 rainhas

130 Ok! Próxima linha Problema das 4 rainhas

131 Problema das 4 rainhas

132 Problema das 4 rainhas

133 Problema das 4 rainhas

134 Problema das 4 rainhas

135 Algoritmo c/ Backtracking N = total de linhas (e colunas e rainhas) total no tabuleiro n = número de linhas (e rainhas) que faltam colocar RAINHAS(int n, int N) // N é sempre igual, pode ser global... se n == 0 então // achou solução: imprime return 1; // uma soluçao foi encontrada else para j de 1 até N faça // coloca rainha na linha n coluna j se nenhuma condição é violada então r = queens(n 1, N) se r == 1 então return 1; // tira rainha da linha n coluna j return 0; // backtrack

136 Exercício de Laboratório Criar um programa em C para resolver o problema das 8 rainhas

137 Video Recursivo

Programação Estruturada

Programação Estruturada Programação Estruturada Recursão Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Recursão Recursão 1 Recursão 2

Leia mais

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição

Recursividade. Métodos iterativos. Prof. Cesar Augusto Tacla. Métodos iterativos utilizam estruturas de repetição Recursividade Prof. Cesar Augusto Tacla Métodos iterativos Métodos iterativos utilizam estruturas de repetição For While Do while Normalmente, um método invoca outros métodos, não a si mesmo. 2 1 Recursividade

Leia mais

MC102 Aula 27 Recursão II

MC102 Aula 27 Recursão II MC102 Aula 27 Recursão II Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Relembrando 2 Cálculo de Potências 3 Torres de Hanoi 4 Recursão e Backtracking 5 Exercício (Instituto

Leia mais

Recursividade. Prof. Jesus José de Oliveira Neto

Recursividade. Prof. Jesus José de Oliveira Neto Recursividade Prof. Jesus José de Oliveira Neto Algoritmos podem ser definidos de duas formas: Forma iterativa ou não recursiva: utiliza laços de repetição (while, for, do/while) Forma recursiva: métodos

Leia mais

Recursividade. Objetivos do módulo. O que é recursividade

Recursividade. Objetivos do módulo. O que é recursividade Recursividade Objetivos do módulo Discutir o conceito de recursividade Mostrar exemplos de situações onde recursividade é importante Discutir a diferença entre recursividade e iteração O que é recursividade

Leia mais

SCC Capítulo 2 Recursão

SCC Capítulo 2 Recursão SCC-501 - Capítulo 2 João Luís Garcia Rosa 1 1 Departamento de Ciências de Computação Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos http://www.icmc.usp.br/~joaoluis

Leia mais

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches CT-234 Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural Carlos Alberto Alonso Sanches CT-234 2) Algoritmos recursivos Indução matemática, recursão, recorrências Indução matemática Uma

Leia mais

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão

ALGORITMOS AVANÇADOS UNIDADE II Recursividade. Luiz Leão Luiz Leão [email protected] http://www.luizleao.com Conteúdo Programático 2.1 - Definições recursivas 2.2 - Como implementar recursividade 2.3 - Quando não usar recursividade 2.4 - Desenvolvendo algoritmos

Leia mais

Introdução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello

Introdução à Ciência da Computação II. Recursão. Prof. Ricardo J. G. B. Campello Introdução à Ciência da Computação II Recursão Prof. Ricardo J. G. B. Campello Agradecimentos Parte dos slides a seguir são adaptações dos originais em Pascal gentilmente cedidos pelo Prof. Rudinei Goularte

Leia mais

SCC0601 Projeto de Algoritmos. Recursão

SCC0601 Projeto de Algoritmos. Recursão SCC0601 Projeto de Algoritmos Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de recorrer Recorrer:

Leia mais

Aula 06: Análise matemática de algoritmos recursivos

Aula 06: Análise matemática de algoritmos recursivos Aula 06: Análise matemática de algoritmos recursivos David Déharbe Programa de Pós-graduação em Sistemas e Computação Universidade Federal do Rio Grande do Norte Centro de Ciências Exatas e da Terra Departamento

Leia mais

Python: Recursão. Claudio Esperança

Python: Recursão. Claudio Esperança Python: Recursão Claudio Esperança Recursão É um princípio muito poderoso para construção de algoritmos A solução de um problema é dividido em Casos simples: São aqueles que podem ser resolvidos trivialmente

Leia mais

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Recursividade. Estrutura de Dados. Prof. Kleber Rezende Recursividade Estrutura de Dados Prof. Kleber Rezende Considerações Iniciais Em aulas anteriores fizemos uma função que permite calcular o fatorial de um número. Naquela função, a cada nova iteração o

Leia mais

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Recursividade Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Recursividade Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si mesmo

Leia mais

Análise de Algoritmos Parte 4

Análise de Algoritmos Parte 4 Análise de Algoritmos Parte 4 Túlio Toffolo [email protected] www.toffolo.com.br BCC202 Aula 07 Algoritmos e Estruturas de Dados I Como escolher o algoritmo mais adequado para uma situação? (continuação)

Leia mais

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Recursividade. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Recursividade David Menotti Algoritmos e Estruturas de Dados II DInf UFPR Conceito de Recursividade Fundamental em Matemática e Ciência da Computação Um programa recursivo é um programa que chama a si

Leia mais

Revisão: Tipo Abstrato de Dados Recursividade

Revisão: Tipo Abstrato de Dados Recursividade Algoritmos e Estrutura de Dados II Revisão: Tipo Abstrato de Dados Recursividade Prof a Karina Oliveira [email protected] Introdução Estudo das estruturas de dados envolve dois objetivos complementares:

Leia mais

04 Recursão SCC201/501 - Introdução à Ciência de Computação II

04 Recursão SCC201/501 - Introdução à Ciência de Computação II 04 Recursão SCC201/501 - Introdução à Ciência de Computação II Prof. Moacir Ponti Jr. www.icmc.usp.br/~moacir Instituto de Ciências Matemáticas e de Computação USP 2010/2 Moacir Ponti Jr. (ICMCUSP) 04Recursão

Leia mais

Análise e Complexidade de Algoritmos

Análise e Complexidade de Algoritmos Análise e Complexidade de Algoritmos Principais paradigmas do projeto de algoritmos - Recursividade - Tentativa e erro - Divisão e Conquista - Programação dinâmica - Algoritmos Gulosos e de Aproximação

Leia mais

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo (

Análise de Problemas Recursivos. Algoritmos e Estruturas de Dados Flavio Figueiredo ( Análise de Problemas Recursivos Algoritmos e Estruturas de Dados 2 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 Lembrando de Recursividade Procedimento que chama a si mesmo Recursividade permite

Leia mais

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira

# Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira # Estrutura de Dados # Aula 08 Recursão (conceito, utilização, exemplos) Prof. Leinylson Fontinele Pereira Na aula anterior... Alocação Dinâmica de Memória Introdução 3 O que vamos aprender? Recursividade

Leia mais

Aula 21 - Algoritmos e Funções Recursivas

Aula 21 - Algoritmos e Funções Recursivas Aula 21 - Considere a definição da função fatorial: n! = 1 se n 0 Considere agora a seguinte definição equivalente: n! = 1 se n 0 Dizemos que essa

Leia mais

Recursividade. Recursividade

Recursividade. Recursividade A recursão é uma técnica que define um problema em termos de uma ou mais versões menores deste mesmo problema. Esta ferramenta pode ser utilizada sempre que for possível expressar a solução de um problema

Leia mais

Aula prática 5. Funções Recursivas

Aula prática 5. Funções Recursivas Programação Funcional UFOP DECOM 2014.1 Aula prática 5 Funções Recursivas Resumo Definições recursivas são comuns na programação funcional. Nesta aula vamos aprender a definir funções recursivas. Sumário

Leia mais

Recursividade Exaustiva e Backtracking

Recursividade Exaustiva e Backtracking Universidade Federal do Espírito Santo Centro de Ciências Agrárias CCA UFES Departamento de Computação Recursividade Exaustiva e Tópicos Especiais em Programação Site: http://jeiks.net E-mail: [email protected]

Leia mais

Fernando Silva DCC-FCUP. Estruturas de Dados

Fernando Silva DCC-FCUP. Estruturas de Dados 3. Recursividade, Bactracking e Dividir-para-Conquistar Fernando Silva DCC-FCUP Estruturas de Dados Fernando Silva (DCC-FCUP) 3. Recursividade, Bactracking e Dividir-para-Conquistar Estruturas de Dados

Leia mais

Análise de Complexidade para algoritmos iterativos e recursivos

Análise de Complexidade para algoritmos iterativos e recursivos Disciplina: Matemática Discreta Agostinho Iaqchan Ryokiti Homa Análise de Complexidade para algoritmos iterativos e recursivos Algoritmos iterativos - complexidade expressa através de somatórios. Algoritmos

Leia mais

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016

MC102 Aula 26. Instituto de Computação Unicamp. 17 de Novembro de 2016 MC102 Aula 26 Recursão Instituto de Computação Unicamp 17 de Novembro de 2016 Roteiro 1 Recursão Indução 2 Recursão 3 Fatorial 4 O que acontece na memória 5 Recursão Iteração 6 Soma em um Vetor 7 Números

Leia mais

LISTA DE EXERCÍCIOS MÊS 04

LISTA DE EXERCÍCIOS MÊS 04 São José dos Campos, 05 de Junho de 2008 Disciplina: CES 10 Introdução à Computação. Semestre 2008-2º Período Professor: Carlos Henrique Quartucci Forster Estagiária: Michelle de Oliveira Parreira Instituto

Leia mais

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4:

Lista de Figuras Figura 1 1: Figura 1 2: Figura 1 3: Figura 1 4: Figura 1 5: Figura 1 6: Figura 1 7: Figura 2 1: Figura 2 2: Figura 2 3: Figura 2 4: Lista de Figuras Figura 1 1: Diagrama de Funcionamento do Laço while 34 Figura 1 2: Diagrama de Funcionamento do Laço do-while 35 Figura 1 3: Diagrama de Funcionamento do Laço for 36 Figura 1 4: Diagrama

Leia mais

Processamento da Informação Teoria. Recursividade

Processamento da Informação Teoria. Recursividade Processamento da Informação Teoria Recursividade Semana 08 Prof. Jesús P. Mena-Chalco 15/06/2013 Uma função chama outra função Vimos exemplos de uma função chamar uma outra função. def fatorial1(n): mult

Leia mais

Técnicas de projeto de algoritmos: Indução

Técnicas de projeto de algoritmos: Indução Técnicas de projeto de algoritmos: Indução ACH2002 - Introdução à Ciência da Computação II Delano M. Beder Escola de Artes, Ciências e Humanidades (EACH) Universidade de São Paulo [email protected] 08/2008

Leia mais

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul

Recursão. Aula 1. Liana Duenha. Faculdade de Computação Universidade Federal de Mato Grosso do Sul Recursão Aula 1 Liana Duenha Faculdade de Computação Universidade Federal de Mato Grosso do Sul Algoritmos e Programação II, Análise de Sistemas, 2010 Martinez & Rubert (FACOM) Recursão APIIAS 1 / 25 Conteúdo

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: funções Prof. Renato Pimentel 1 Subprogramas Subprograma: programa que auxilia o programa principal na realização de uma determinada

Leia mais

Recursividade Alguns problemas são definidos com base nos mesmos, ou seja, podem ser descritos por instâncias do próprio problema.

Recursividade Alguns problemas são definidos com base nos mesmos, ou seja, podem ser descritos por instâncias do próprio problema. Recursividade Alguns problemas são definidos com base nos mesmos, ou seja, podem ser descritos por instâncias do próprio problema. Para tratar estas classes de problemas, utilizase o conceito de recursividade.

Leia mais

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( ) Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista (2.1-2.2) DECOM/UFOP 2013/1 5º. Período Anderson Almeida Ferreira Adaptado do material desenvolvido por Andréa Iabrudi

Leia mais

Introdução a Computação

Introdução a Computação O que é um computador? Um computador é uma coleção de componentes que realizam operações lógicas e aritméticas sobre um grande volume de dados. (F. K. Miyazawa) Um computador é composto por: Introdução

Leia mais

Aulas 5 e 6 / 28 e 30 de março

Aulas 5 e 6 / 28 e 30 de março Aulas 5 e / 8 e 30 de março 1 Notação de soma e produto Como expressar a seguinte soma de uma maneira mais concisa? 1 + + 3 3 + + 10? Note que as parcelas são semelhantes, e que a única coisa que varia

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO Prof.ª Danielle Casillo Diferentes computadores podem ter diferentes arquiteturas e os diversos tipos de linguagem de programação.

Leia mais

SCC Introdução à Ciência de Computação II. Recursão

SCC Introdução à Ciência de Computação II. Recursão SCC0601 - Introdução à Ciência de Computação II Recursão Definição Uma função é dita recursiva quando é definida em seus próprios termos, direta ou indiretamente Dicionário Michaelis: ato ou efeito de

Leia mais

Aula 16: Laços aninhados e desvios

Aula 16: Laços aninhados e desvios Aula 16: Laços aninhados e desvios Introdução a Programação Túlio Toffolo & Puca Huachi http://www.toffolo.com.br BCC201 2019/1 Departamento de Computação UFOP Aula Anterior Comandos de Repetição (Parte

Leia mais

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02

Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02 1 Objetivos da lista Universidade Federal do ABC Programação Estruturada Fabrício Olivetti França Lista de Exercícios 02 Esta lista de exercícios tem como objetivo introduzir funções na linguagem C. Como

Leia mais

BCC202 - Estrutura de Dados I

BCC202 - Estrutura de Dados I BCC202 - Estrutura de Dados I Aula 13: Ordenação: MergeSort Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Computação, DECOM Website: www.decom.ufop.br/reifortes Email: [email protected]

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

Aula 05: - Recursão (parte 1)

Aula 05: - Recursão (parte 1) MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. João Henrique Kleinschmidt Material elaborado pelo prof. Jesús P. Mena-Chalco 3Q-20108 Recursão: Se você ainda não entendeu; Ver: "Recursão".

Leia mais

Aula 10 Algoritmos e Funções Recursivas

Aula 10 Algoritmos e Funções Recursivas Aula 10 Algoritmos e Funções Recursivas Considere a definição da função fatorial: n! = 1 se n 0 Considere agora a seguinte definição equivalente: n! = 1 se n

Leia mais

Introdução à Programação. Recursão

Introdução à Programação. Recursão Introdução à Programação Recursão Recursão decoração Substantivo feminino. 1.Ato ou efeito de decorar decorar Verbo transitivo direto. 1.Guarnecer com adorno(s); dispor formas e cores em; ornamentar, embelezar;

Leia mais

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome:

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome: ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome: RA: Turma: Questão 1 (ENADE Computação 2005) No famoso jogo da Torre de Hanói,

Leia mais

Recursividade, Tentativa e Erro

Recursividade, Tentativa e Erro 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 Na aula anterior Prova 2 Na aula de hoje Técnicas

Leia mais

Análise de algoritmos

Análise de algoritmos Análise de algoritmos Introdução à Ciência de Computação II Baseados nos Slides do Prof. Dr. Thiago A. S. Pardo Análise de algoritmos Existem basicamente 2 formas de estimar o tempo de execução de programas

Leia mais

Algoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO

Algoritmos e Programação. AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO 1 Algoritmos e Programação AULA 21: Recursividade UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO TECNOLÓGICO CIÊNCIA DA COMPUTAÇÃO 2 Recursividade A recursão é o processo pelo qual passa um

Leia mais

UNIVERSIDADE ESTADUAL PAULISTA Julio de Mesquita Filho" FACULDADE DE ENGENHARIA

UNIVERSIDADE ESTADUAL PAULISTA Julio de Mesquita Filho FACULDADE DE ENGENHARIA UNIVERSIDADE ESTADUAL PAULISTA Julio de Mesquita Filho" FACULDADE DE ENGENHARIA 8ª. LISTA DE EXERCÍCIOS FUNÇÕES E PROCEDIMENTOS Disciplina: Programação de Computadores Prof. Dra Cassilda Maria Ribeiro

Leia mais

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos

Modelagem com relações de recorrência. Exemplo: Determinada população dobra a cada ano; população inicial = 5 a n = população depois de n anos Relações de recorrência 8. RELAÇÕES DE RECORRÊNCIA Introdução a relações de recorrência Modelagem com relações de recorrência Solução de relações de recorrência Exemplos e aplicações Relações de recorrência

Leia mais

DAS5102 Fundamentos da Estrutura da Informação

DAS5102 Fundamentos da Estrutura da Informação Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa

Leia mais

Roteiro Prático Nº 13 Recursividade

Roteiro Prático Nº 13 Recursividade UNIVERSIDADE FEDERAL DE ITAJUBÁ UNIFEI CAMPUS ITABIRA BAC004 TÉCNICAS DE PROGRAMAÇÃO Professores: Claudia, Denílson, Fabiana, Fernando, Juliano, Natália, Raquel, Rodrigo, Sandro e Walter Roteiro Prático

Leia mais

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO TEORIA DA COMPUTAÇÃO Aula 04 Programa Recursivo e Máquinas Prof.ª Danielle Casillo Funções recursivas Alguma função é recursiva quando

Leia mais

Utilização do Conjunto de Cantor para a resolução da Torre de Hanoi

Utilização do Conjunto de Cantor para a resolução da Torre de Hanoi Utilização do Conjunto de Cantor para a resolução da Torre de Hanoi Filipe Daniel Lemos FEUP 030509045 Dezembro de 2004 Resumo Segundo trabalho para a cadeira de Física dos sitemas dinâmicos do curso de

Leia mais

Algoritmos de Ordenação

Algoritmos de Ordenação Algoritmos de Ordenação! Problema: encontrar um número de telefone em uma lista telefônica! simplificado pelo fato dos nomes estarem em ordem alfabética! e se estivesse sem uma ordem?! Problema: busca

Leia mais

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação Linguagem C: agregados heterogêneos, arquivos binários, recursividade Prof. Críston Algoritmos e Programação Agregados heterogêneos Permitem agrupar variáveis de diferentes tipos em um único registro struct

Leia mais

Aula 05: - Recursão (parte 1)

Aula 05: - Recursão (parte 1) MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. Jesús P. Mena-Chalco [email protected] 3Q-20107 1 Recursão: Se você ainda não entendeu; Ver: "Recursão". Efeito Droste Anuncio

Leia mais

Estruturas de Dados II

Estruturas de Dados II Estruturas de Dados II Rodrigo Porfírio da Silva Sacchi [email protected] 3410-2086 Aula 2: Árvores http://www.do.ufgd.edu.br/rodrigosacchi Árvores Definição: Árvores Uma árvore T é um conjunto

Leia mais

Pesquisa e Ordenação

Pesquisa e Ordenação Pesquisa e Ordenação SC121 - Introdução à Programação ICMC - USP - São Carlos Maio de 2009 Algoritmo de Procura Algoritmo de Procura O problema de procurar, pesquisar alguma informação numa tabela ou num

Leia mais

Algoritmos e Funções Recursivas

Algoritmos e Funções Recursivas Considere a definição da função fatorial: n! = 1 se n 0 Considere agora a seguinte definição equivalente: n! = 1 se n 0 Dizemos que essa última

Leia mais

Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e Tecnologia Bacharelado em Sistemas de Informação Estruturas de Dados I Lista II

Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e Tecnologia Bacharelado em Sistemas de Informação Estruturas de Dados I Lista II Universidade Federal da Grande Dourados Faculdade de Ciências Exatas e Tecnologia Bacharelado em Sistemas de Informação Estruturas de Dados I Lista II Professor: MSc. Rodrigo Porfírio da Silva Sacchi 30

Leia mais

BC1424 Algoritmos e Estruturas de Dados I Aula 03: Recursão / Recursividade

BC1424 Algoritmos e Estruturas de Dados I Aula 03: Recursão / Recursividade BC1424 Algoritmos e Estruturas de Dados I Aula 03: Recursão / Recursividade Prof. Jesús P. Mena-Chalco 1Q-2016 1 Sobre a Lista 01 2 Lista 01 Solve me first Simple Array Sum A Very Big Sum Diagonal Difference

Leia mais