Programação Estruturada
|
|
|
- André Casqueira
- 6 Há anos
- Visualizações:
Transcrição
1 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
2 Recursão
3 Recursão 1
4 Recursão 2
5 Recursão O que os seguintes problemas têm em comum? Fatorial 1 se i = 0 F i = i F i 1 caso contrário O i-ésimo elemento da Sequência de Fibonacci (F i ) i se i < 2 F i = F i 1 + F i 2 caso contrário Máximo divisor comum (MDC) a se b = 0 MDC(a, b) = MDC(b, a mod b) caso contrário 3
6 Recursão Fatorial 1 int fatorial(int i) { 2 if (i == 0) return 1; 3 return i * fatorial(i - 1); 4 } O i-ésimo elemento da Sequência de Fibonacci (F i ) 1 int fib(int i) { 2 if (i < 2) return i; 3 return fib(i - 1) + fib(i - 2); 4 } Máximo divisor comum (MDC) 1 int mdc(int a, int b) { 2 if (b == 0) return a; 3 return mdc(b, a % b); 4 } 4
7 Recursão Um objeto é denominado recursivo quando sua definição é parcialmente feita em termos dele mesmo. Em programação, a recursividade é um mecanismo útil e poderoso que permite a uma função chamar a si mesma direta ou indiretamente. A ideia básica de um algoritmo recursivo consiste em diminuir sucessivamente o problema em um problema menor ou mais simples, até que o possamos resolver o problema reduzido de forma direta. Quando isso ocorre, atingimos uma condição de parada. 5
8 Indução
9 Indução Usando o método de indução, a solução de um problema pode ser expressa da seguinte forma: Primeiramente, definimos a solução para casos básicos; Em seguida, definimos como resolver o problema para um caso geral, utilizando-se de soluções para instâncias menores do problema. 6
10 Indução Indução: Técnica de demonstração matemática onde algum parâmetro da proposição a ser demonstrada envolve números naturais. Seja T (n) uma proposição que desejamos provar como verdadeira para todos valores naturais n. Ao invés de provar diretamente que T (n) é válida para todos os valores de n, basta: 1. Caso base: Provar que T (1) é válido. 2. Hipótese de Indução: Assumir que T (n 1) é válida. 3. Passo de indução: Provar que T (n) é válida. 7
11 Indução Por que a indução funciona? Mostramos que T (1) é valida. Com o passo da indução, automaticamente mostramos que T (2) é válida. Como T (2) é válida, pelo passo de indução, T (3) também é válida. E assim por diante... 8
12 Indução OBS: O caso base não precisa ser necessariamente com n = 1. Você pode considerar um caso inicial n = c para uma constante c qualquer. Se você mostrar que este caso base é valido e o passo também é valido: sua proposição é verdadeira para todo n c. 9
13 Exemplo Teorema 2 2n 1 é múltiplo de 3 para n 0. Base: Para n = 0 temos que 2 2n 1 = 0, que é múltiplo de 3. Hipótese: O teorema é válido para n 1, ou seja, 2 2(n 1) 1 é múltiplo de 3. Passo: Devemos provar que 2 2n 1 é múltiplo de 3. Para tanto, vamos usar a hipótese. Note que 2 2n 1 = 2 2n = 4(2 2(n 1) ) 1 = 3(2 2(n 1) ) + 2 2(n 1) 1. Note que 3(2 2(n 1) ) é múltiplo de 3 e, por hipótese, 2 2(n 1) 1 também é múltiplo de 3. Portanto, 3(2 2(n 1) ) + 2 2(n 1) 1 = 2 2n 1 é múltiplo de 3. 10
14 Exemplo Teorema A soma S(n) dos primeiros n números naturais é n(n + 1)/2 Base: Para n = 1 devemos mostrar que n(n + 1)/2 = 1. Isto é verdade: 1(1 + 1)/2 = 1. Hipótese: Vamos assumir que é válido para (n 1), ou seja, S(n 1) = (n 1)((n 1) + 1)/2. Passo: Devemos mostrar que é válido para n, ou seja, devemos mostrar que S(n) = n(n + 1)/2. Por definição, S(n) = S(n 1) + n e por hipótese S(n 1) = (n 1)((n 1) + 1)/2. Logo, S(n) = S(n 1) + n = (n 1)((n 1) + 1)/2 + n = n(n 1)/2 + 2n/2 = n(n + 1)/2 11
15 Recursão
16 Recursão Definições recursivas de funções funcionam como o princípio matemático da indução que vimos anteriormente. A ideia é que a solução de um problema pode ser expressa da seguinte forma: Definimos a solução para casos básicos; Definimos como resolver o problema geral utilizando soluções do mesmo problema só que para casos menores. 12
17 Exemplo: fatorial Problema Calcular o fatorial de um número n (n!). Qual o caso base? Se n é igual a 1, então o fatorial é 1. Qual seria o passo indutivo? Temos que expressar a solução para n > 1, supondo que já sabemos a solução para algum caso mais simples: n! = n (n 1)! 13
18 Fatorial Portanto, a solução do problema pode ser expressa de forma recursiva como: Se n = 1, então n! = 1. Se n > 1, então n! = n (n 1)!. Note como aplicamos o princípio da indução: Sabemos a solução para um caso base: n = 1. Definimos a solução do problema geral n! em termos do mesmo problema só que para um caso menor (n 1)!. 14
19 Fatorial em C 1 long int fatorial(int n) { 2 long int r, x; 3 4 /* caso base: */ 5 if (n == 1) 6 return 1; 7 else { 8 /* sabendo o fatorial de n-1: */ 9 x = n-1; 10 r = fatorial(x); 11 /* calculamos o fatorial de n: */ 12 return n * r; 13 } 14 } 15
20 Funções recursivas Para solucionar o problema, é feita uma chamada para a própria função. Por isso, esta função é chamada recursiva. Recursividade geralmente permite uma descrição mais clara e concisa dos algoritmos, especialmente quando o problema é recursivo por natureza. 16
21 O que acontece na memória
22 O que acontece na memória Precisamos entender como é feito o controle sobre as variáveis locais em chamadas recursivas. A memória de um sistema computacional é dividida em alguns segmentos: Espaço Estático: Contém as variáveis globais e código do programa. Heap: Para alocação dinâmica de memória. Pilha: Para execução de funções. 17
23 O que acontece na memória O que acontece na pilha: Toda vez que uma função é invocada, suas variáveis locais são armazenadas no topo da pilha. Quando uma função termina a sua execução, suas variáveis locais são removidas da pilha. 18
24 O que acontece na memória Considere o exemplo: 1 int f1(int a, int b) { 2 int c = 5; 3 return c + a + b; 4 } 5 6 int f2(int a, int b) { 7 int c; 8 c = f1(b, a); 9 return c; 10 } int main() { 13 f2(2, 3); 14 return 0; 15 } 19
25 O que acontece na memória Inicialmente a pilha está vazia. Pilha Topo 20
26 O que acontece na memória Quando f2(2, 3) é invocada, as variáveis locais de f2 são alocadas no topo da pilha. Pilha Topo f2 a b c
27 O que acontece na memória A função f2 invoca a função f1(b, a) e as variáveis locais desta são alocadas no topo da pilha, sobre as de f2. f1 a b c Pilha Topo f2 a b c
28 O que acontece na memória A função f1 termina, devolvendo 10. As variáveis locais de f1 são removidas da pilha. Pilha Topo f2 a b c
29 O que acontece na memória Finalmente, f2 termina a sua execução devolvendo 10. Suas variáveis locais são removidas da pilha. Pilha Topo 24
30 O que acontece na memória No caso de chamadas recursivas para uma mesma função, é como se cada chamada correspondesse a uma função distinta. As execuções das chamadas de funções recursivas são feitas na pilha, assim como qualquer função. O último conjunto de variáveis alocadas na pilha, que está no topo, corresponde às variáveis da última chamada da função. Quando termina a execução de uma chamada da função, as variáveis locais desta são removidas da pilha. Sem uma condição de parada, o algoritmo não para de chamar a si mesmo, até estourar a capacidade da pilha. 25
31 Usando recursão em programação Considere novamente a solução recursiva para se calcular o fatorial e assuma que seja feito a chamada fatorial(4). 1 long int fatorial(int n) { 2 long int r, x; 3 4 /* caso base: */ 5 if (n == 1) 6 return 1; 7 else { 8 /* sabendo o fatorial de n-1: */ 9 x = n-1; 10 r = fatorial(x); 11 /* calculamos o fatorial de n: */ 12 return n * r; 13 } 14 } 26
32 O que acontece na memória Cada chamada à função fatorial cria novas variáveis locais de mesmo nome (n, x e r). Portanto, várias variáveis n, x e r podem existir em um dado momento. Em um dado instante, o nome n (ou r, ou x) refere-se à variável local ao corpo da função que está sendo executada naquele instante. 27
33 O que acontece na memória Estado da pilha de execução para fatorial(4): 2 1 * fat(2) 3 2 * fat(3) 3 2 * fat(3) 4 3 * fat(4) 4 3 * fat(4) 4 3 * fat(4) n x r n x r n x r 1 * * fat(1) 2 1 * fat(2) 3 2 * fat(3) 4 3 * fat(4) fat(2) 3 2 * fat(3) 4 3 * fat(4) fat(3) 4 3 * fat(4) 6 n x r n x r n x r fat(4) 24 n x r n x r 28
34 O que acontece na memória É claro que as variáveis r e x são desnecessárias. E você também deveria testar se n não é negativo! 1 long int fatorial(int n) { 2 if (n <= 1) 3 return 1; 4 else 5 return n * fatorial(n-1); 6 } 1 long int fatorial(int n) { 2 if (n <= 1) 3 return 1; 4 return n * fatorial(n-1); 5 } 29
35 Recursão Iteração
36 Recursão Iteração Soluções recursivas são geralmente mais concisas que as iterativas. Soluções iterativas em geral têm a memória limitada enquanto as recursivas, não. Cópia dos parâmetros a cada chamada recursiva é um custo adicional para as soluções recursivas. 30
37 Recursão Iteração No caso do cálculo do fatorial, uma solução iterativa é mais eficiente. Por quê? 1 long int fatorial(int n) { 2 long int result = 1; 3 int i; 4 5 for (i = 1; i <= n; i++) 6 result = result * i; 7 8 return r; 9 } 31
38 Recursão com várias chamadas Não há necessidade da função recursiva ter apenas uma chamada para si própria. A função pode fazer várias chamadas para si própria. A função pode ainda fazer chamadas recursivas indiretas: a função 1, por exemplo, chama uma outra função 2 que por sua vez chama a função 1. 32
39 Fibonacci A série de Fibonacci é a seguinte: 1, 1, 2, 3, 5, 8, 13, 21,.... Queremos determinar qual é o n-ésimo número da série, que denotaremos por F (n). Como descrever o n-ésimo número de Fibonacci de forma recursiva? 33
40 Fibonacci No caso base, temos: se n = 1 ou n = 2, então F (n) = 1. Sabendo casos anteriores podemos computar F (n): F (n) = F (n 1) + F (n 2). 34
41 Fibonacci: algoritmo em C A definição anterior é traduzida diretamente em um algoritmo em C: 1 long int fibonacci(int n) { 2 if (n <= 2) 3 return 1; 4 5 return fibonacci(n-1) + fibonacci(n-2); 6 } 35
42 Cálculo de potências Suponha que temos que calcular x n para n inteiro positivo. Como calcular de forma recursiva? x n é: 1, se n = 0. xx n 1, caso contrário. 36
43 Cálculo de Potências 1 long int pot(long int x, long int n) { 2 if (n == 0) 3 return 1; 4 5 return x * pot(x, n-1); 6 } 37
44 Cálculo de Potências Neste caso a solução iterativa é mais eficiente: 1 long int pot(long int x, long int n) { 2 long int result = 1, i; 3 4 for (i = 1; i <= n; i++) 5 result = result * x; 6 7 return result; 8 } O laço é executado n vezes. Na solução recursiva são feitas n chamadas recursivas, mas tem-se o custo adicional para criação/remoção de variáveis locais na pilha. 38
45 Cálculo de Potências Mas e se definirmos a potência de forma diferente? x n é: se n = 0, então x n = 1. se n > 0 e n é par, então x n = (x n/2 ) 2. se n > 0 e n é ímpar, então x n = x(x (n 1)/2 ) 2. Note que aqui também definimos a solução do caso maior em termos de casos menores. 39
46 Cálculo de Potências Este algoritmo é mais eficiente do que o iterativo. Por quê? Quantas chamadas recursivas o algoritmo pode fazer? 1 long int pot(long int x, long int n) { 2 long int aux; 3 4 if (n == 0) 5 return 1; 6 7 else if (n % 2 == 0) { 8 aux = pot(x, n/2); 9 return aux * aux; 10 } else { 13 aux = pot(x, (n-1)/2); 14 return x * aux * aux; 15 } 16 } 40
47 Cálculo de Potências No algoritmo anterior, a cada chamada recursiva o valor de n é dividido por 2. Ou seja, a cada chamada recursiva, o valor de n decai para pelo menos a metade. Usando divisões inteiras faremos no máximo (log 2 n) + 1 chamadas recursivas. Enquanto isso, o algoritmo iterativo executa o laço n vezes. 41
48 Torres de Hanoi A B C 42
49 Torres de Hanoi Inicialmente temos 5 discos de diâmetros diferentes na estaca A. O problema das torres de Hanoi consiste em transferir os cinco discos da estaca A para a estaca C (pode-se usar a estaca B como auxiliar). Porém deve-se respeitar as seguintes regras: Apenas o disco do topo de uma estaca pode ser movido. Nunca um disco de diâmetro maior pode ficar sobre um disco de diâmetro menor. 43
50 Torres de Hanoi Vamos considerar o problema geral onde há n discos. Vamos usar indução para obtermos um algoritmo para este problema. 44
51 Torres de Hanoi Base: n = 1. Neste caso temos apenas um disco. Basta mover este disco da estaca A para a estaca C. Hipótese: Sabemos como resolver o problema quando há n 1 discos. Passo: Devemos resolver o problema para n discos. Por hipótese de indução, sabemos mover os n 1 primeiros discos da estaca A para B usando C como auxiliar. Depois de movermos estes n 1 discos, movemos o maior disco (que continua na estaca A) para a estaca C. Novamente pela hipótese de indução, sabemos mover os n 1 discos da estaca B para C usando A como auxiliar. Com isso temos uma solução para o caso onde há n discos. A indução nos fornece um algoritmo e ainda por cima temos uma demonstração formal de que ele funciona! 45
52 Torres de Hanoi: algoritmo Problema: Mover n discos de A para C. 1. Se n = 1, então mova o único disco de A para C e pare. 2. Caso contrário (n > 1) desloque de forma recursiva os n 1 primeiros discos de A para B, usando C como auxiliar. 3. Mova o último disco de A para C. 4. Mova, de forma recursiva, os n 1 discos de B para C, usando A como auxiliar. 46
53 Torres de Hanoi: algoritmo A função que computa a solução (em C) terá o seguinte protótipo: 1 void hanoi(int n, char estacainicio, char estacafim, char estacaaux); É passado como parâmetro o número de discos a ser movido (n) e três caracteres indicando de onde os discos serão movidos (estacainicio), para onde devem ser movidos (estacafim) e qual é a estaca auxiliar (estacaaux). 47
54 Torres de Hanoi: algoritmo A função que computa a solução é: 1 void hanoi(int n, char estacainicio, char estacafim, char estacaaux) { 2 if (n == 1) { 3 /* Caso base: move o único disco diretamente */ 4 printf("mova disco %d de %c para %c.\n", n, estacainicio, estacafim); 5 } else { 6 /* Move n-1 discos de Inicio para Aux usando Fim de auxiliar: */ 7 hanoi(n-1, estacainicio, estacaaux, estacafim); 8 9 /* Move o maior disco para estacafim: */ 10 printf("mova disco %d de %c para %c.\n", n, estacainicio, estacafim); /* Move os n-1 discos de Aux para Fim usando Ini de auxiliar: */ 13 hanoi(n-1, estacaaux, estacafim, estacainicio); 14 } 15 } 48
55 Torres de Hanoi: algoritmo 1 #include <stdio.h> 2 3 void hanoi(int n, char estacainicio, char estacafim, char estacaaux); 4 5 int main() { 6 hanoi(4, 'A', 'C', 'B'); 7 return 0; 8 } 9 10 void hanoi(int n, char estacainicio, char estacafim, char estacaaux) { 11 if (n == 1) 12 printf("mova disco %d de %c para %c.\n", n, estacainicio, estacafim); 13 else { 14 hanoi(n-1, estacainicio, estacaaux, estacafim); 15 printf("mova disco %d de %c para %c.\n", n, estacainicio, estacafim); 16 hanoi(n-1, estacaaux, estacafim, estacainicio); 17 } 18 } 49
56 Exercícios
57 Exercício O que será impresso pela chamada imprimir(5)? 1 void imprimir(int i) { 2 int j; 3 if (i > 0) { 4 imprimir(i - 1); 5 for (j = 1; j <= i; j++) 6 printf("*"); 7 printf("\n"); 8 } 9 } 50
58 Exercício Mostre o estado da pilha de memória durante a execução da função fibonacci com a chamada fibonacci(5). Qual versão é mais eficiente para se calcular o n-ésimo número de Fibonacci, a recursiva ou a iterativa? Justifique. 51
59 Exercício Escreva uma função recursiva que, dado um número inteiro positivo n, imprima a representação binária de n 52
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
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
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
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
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
Algoritmos e Estruturas de Dados I
Algoritmos e Estruturas de Dados I Prof. Daniel M. Martin ([email protected]) Aula 10 (Baseada nos slides do Prof. André Balan) Recursão Recursão Da wikipedia: A recursão é o processo pelo qual
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. 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
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
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/14 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
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
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
MC102 Algoritmos e Programação de Computadores
MC102 Algoritmos e Programação de Computadores Instituto de Computação UNICAMP Primeiro Semestre de 2014 Roteiro 1 Maior número 2 Soma de n números 3 Fatorial 4 Máximo Divisor Comum (MDC) 5 Números primos
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
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:
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
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
# 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
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
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:
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
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
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/30 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.
222222222222222222222222222 8 - FUNÇÕES 81 - Características básicas É um trecho independente de código, com objetivos bem definidos Programas em C, geralmente consistem em várias pequenas funções, ao
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
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
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
05 Análise de Algoritmos (parte 4) SCC201/501 - Introdução à Ciência de Computação II
05 Análise de Algoritmos (parte 4) 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
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
CORREÇÃO DE ALGORITMOS E
AULA 3 CORREÇÃO DE ALGORITMOS E PROGRAMAS É fato que estamos muito interessados em construir algoritmos e programas eficientes, conforme vimos na aula 2. No entanto, de nada vale um algoritmo eficiente
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
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
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
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
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
Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?
Funções Suponha um conjunto habitacional, com várias famílias...... imagina se todas elas morassem em uma única casa? Funções Introdução à Computação 1 de 28 Funções Na Programação, funções são conjuntos
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
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
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
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
Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr
5COP096 Teoria da Computação Aula 4 Prof. Dr. Sylvio Barbon Junior 1 Sumário 1) Técnicas de Análise de Algoritmos 2) Paradigmas de Projeto de Algoritmos 1) Indução 2) Recursão 3) Algoritmos Tentativa e
ALGORITMOS E ESTRUTURAS DE DADOS CES-11
ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro [email protected] Sala 110 Prédio da Computação www.comp.ita.br/~pauloac IECE - ITA Revisão CES-11 Tipos escalares primitivos Tipos constituídos
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
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
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
Analise o código abaixo:
Recursão - introdução Analise o código abaixo: 1 # include 2 # include 3 int Fatorial ( int x) 4 int k, s =1; for (k =0;k
INF 1010 Estruturas de Dados Avançadas
INF 1010 Estruturas de Dados Avançadas Complexidade de Algoritmos 2012 DI, PUC-Rio Estruturas de Dados Avançadas 2012.2 1 Introdução Complexidade computacional Termo criado por Hartmanis e Stearns (1965)
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
Divisão e Conquista. Norton T. Roman. Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder
Divisão e Conquista Norton T. Roman Apostila baseada nos trabalhos de Cid de Souza, Cândida da Silva e Delano M. Beder Divisão e Conquista Construção incremental Ex: Consiste em, inicialmente, resolver
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA
INE5403 FUNDAMENTOS DE MATEMÁTICA DISCRETA PARA A COMPUTAÇÃO PROF. DANIEL S. FREITAS UFSC - CTC - INE Prof. Daniel S. Freitas - UFSC/CTC/INE/2007 p.1/26 3 - INDUÇÃO E RECURSÃO 3.1) Indução Matemática 3.2)
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
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
Programação Estruturada
Programação Estruturada Estruturas de repetição Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Comandos de repetiçã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;
Aula 18 Algoritmos básicos de busca e classificação
Aula 18 Algoritmos básicos de busca e classificação Dentre os vários algoritmos fundamentais, os algoritmos de busca em tabelas e classificação de tabelas estão entre os mais usados. Considere por exemplo
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
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
Capacitação em Linguagem C Parte 1
Capacitação em Linguagem C Parte 1 Andrey Souto Maior Giuseppe Portolese Universidade Estadual de Maringá - Centro de Tecnologia Departamento de Informática 21 de outubro de 2015 Sumário I Definição e
Programação Estruturada
Programação Estruturada Introdução à linguagem C Professores Emílio Francesquini e Carla Negri Lintzmayer 2018.Q3 Centro de Matemática, Computação e Cognição Universidade Federal do ABC Programação estruturada
