Algoritmos e Estruturas de Dados I
|
|
|
- Terezinha Brás Sacramento
- 9 Há anos
- Visualizações:
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 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
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
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
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
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
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
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
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
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
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:
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
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
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
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
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)
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
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:
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
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
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
# 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
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
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
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
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]
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
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
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
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
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
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
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
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
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
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.
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
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
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
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.
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
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
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
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]
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
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".
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
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;
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,
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
