• Nenhum resultado encontrado

EDAula05

N/A
N/A
Protected

Academic year: 2021

Share "EDAula05"

Copied!
11
0
0

Texto

(1)ANHANGUERA ENSINO SUPERIOR Faculdades de Valinhos - FAV Valinhos, maio de 2008. Estrutura de Dados. Prof. Dr. Marcelo Augusto Cicogna. ESTRUTURA DO CURSO ED - AULA 5. 2.  Cronograma de Aulas - Segundo Bimestre  Aula 5: Recursividade • Conceitos básicos • Análise de processos recursivos.  Aula 6: Árvores. Prof. Dr. Marcelo Augusto Cicogna. • Conceitos de árvores binárias • Operações básicas e algoritmos de percurso e busca.  Aula 7: Grafos • Conceitos básicos • Algoritmo de caminho mínimo • Introdução à Programação Dinâmica.  Segunda Avaliação: 12/06/2008  Segunda Substitutiva: 26/06/2008. ©2008 FAV – Estrutura de Dados..

(2) CONTEÚDO ED - AULA 5. 3. Prof. Dr. Marcelo Augusto Cicogna.  Nessa Aula . Motivação. . Introdução. . Análise da Função Fatorial. . Análise da Série de Fibonacci. . Trabalho Computacional . Funções comuns (iterativas). . Funções recursivas. . Eficiência da Recursividade. . Torres de Hanoi. GNU GNU’s Not Unix.. Recursion See "Recursion".. EDUC ©2008 FAV – Estrutura de Dados.. 132-206*. MOTIVAÇÃO ED - AULA 5. 4.  Crescimento Populacional Exemplo de uma Função de Crescimento Populacional. Prof. Dr. Marcelo Augusto Cicogna. p (t ) = k1 p (t − 1) k2. http://en.wikipedia.org/wiki/World_population ©2008 FAV – Estrutura de Dados..

(3) MOTIVAÇÃO ED - AULA 5. 5.  Fractais Exemplo Figura Fractal. Prof. Dr. Marcelo Augusto Cicogna. A figura ao lado é uma forma recursiva de si mesma. Cada triângulo eqüilátero é formado por três triângulos menores que possuem a mesma estrutura interna.. http://en.wikipedia.org/wiki/Recursion ©2008 FAV – Estrutura de Dados.. INTRODUÇÃO ED - AULA 5. 6.  Probabilidade e Estatística Número de Permutações. Prof. Dr. Marcelo Augusto Cicogna. Na Estatística existe um assunto denominado Princípios de Contagem muito importante para o cálculo e interpretação de processos estatísticos. Um exemplo fundamental de contagem é a Permutação. Uma permutação é um arranjo ordenado de objetos. Exemplo: Permutação dos objetos A, B e C ABC, ACB, BAC, BCA, CAB, CBA Nota-se que são 6 o número de arranjos (permutações) de 3 objetos. Para. n objetos, o cálculo do número de permutações seria:. P = n (n – 1) (n – 2) ... 1 O cálculo acima é denominado fatorial de matematicamente como n!.. ©2008 FAV – Estrutura de Dados.. n e é descrito.

(4) INTRODUÇÃO ED - AULA 5. 7.  Função Fatorial Definição:. Prof. Dr. Marcelo Augusto Cicogna. Dado um número inteiro positivo n, o fatorial de n é definido como o produto de todos os inteiros entre n e 1. Geralmente, utiliza-se o ponto de exclamação (!) para indicar a função fatorial (n!). ALGORITMO Fatorial. Exemplos: a) 0! = 1 (por definição) b) 1! = 1 c) 2! = 2 * 1 = 2 d) 5! = 5 * 4 * 3 * 2 * 1 = 120. ?. Questão: existe uma forma alternativa de implementar a função fatorial?. Fatorial (n: INTEIRO): INTEIRO Início DECLARE i, prod INTEIROS; prod = 1; PARA i = n DECR ATÉ 1 FAÇA prod = prod * i; RETORNE prod; Fim FIM_ALGORITMO. EDUC 132-136*. ©2008 FAV – Estrutura de Dados.. INTRODUÇÃO ED - AULA 5. 8.  Função Fatorial Definição Matemática:. se n = 0 1 n!=  n (n − 1) (n − 2) ...1 se n > 0. Prof. Dr. Marcelo Augusto Cicogna. Listando os primeiros valores da Função Fatorial: a) 0! = 1 (por definição). a). 0! = 1 (por definição). b) 1! = 1. b). 1! = 1. c) 2! = 2 * 1 = 2. c). 2! = 2 * 1! = 2. d) 3! = 3 * 2 * 1 = 6. d). 3! = 3 * 2! = 6. e) 4! = 4 * 3 * 2 * 1 = 24. e). 4! = 4 * 3! = 24. f) 5! = 5 * 4 * 3 * 2 * 1 = 120. f). 5! = 5 * 4! = 120 .... se n = 0 1 n!=   n (n − 1)! se n > 0. n! = n (n - 1)! EDUC. ©2008 FAV – Estrutura de Dados.. 132-136*.

(5) INTRODUÇÃO ED - AULA 5. 9.  Função Fatorial Forma Recursiva:. Prof. Dr. Marcelo Augusto Cicogna. se n = 0 1 n!=   n (n − 1)! se n > 0. Em Linguagem Algorítmica: Seja a Função Fatorial (n!) expressa como Fact (n) Logo, a definição em termos algorítmicos fica assim: Fact (0) = 1 Fact (n) = n * Fact (n-1) A função acima é recursiva pois a sua definição é feita de forma recorrente (em ambos os lados da igualdade). EDUC 132-136*. ©2008 FAV – Estrutura de Dados.. INTRODUÇÃO ED - AULA 5. 10.  Função Fatorial ALGORITMO Fatorial. Prof. Dr. Marcelo Augusto Cicogna. Fatorial (n: INTEIRO): INTEIRO Início SE (n = 0) RETORNE ( 1 ); SENÃO RETORNE ( n * Fatorial (n-1) ); Fim FIM_ALGORITMO. Exemplo de Análise da Forma Recursiva: Fact (5) 5 * Fact (4) 4 * Fact (3) 3 * Fact (2) 2 * Fact (1) 1 * Fact (0). 120 24 6 2 1 EDUC. ©2008 FAV – Estrutura de Dados.. 132-136*.

(6) ANÁLISE DA FUNÇÃO FATORIAL ED - AULA 5. 11. Prof. Dr. Marcelo Augusto Cicogna.  Função Fatorial: Implementação Direta. MainRecur.c. int fatorialDirInt(int n) /** Função para cálculo do fatorial de um número inteiro. Função direta utilizando processo iterativo e valores inteiros. @param n valor inteiro para cálculo de seu fatorial. @return Fatorial do número inteiro n passado como parâmetro. Observar o limite numérico de valores inteiros. @version 1.00 @author Marcelo Augusto Cicogna */ { int i, prod = 1; if (n >= 0) for (i = n; i > 0; i--) prod *= i; Questão: Qual o maior número return (prod); inteiro que essa função pode }. ?. calcular o fatorial? Por que?. ©2008 FAV – Estrutura de Dados.. ANÁLISE DA FUNÇÃO FATORIAL ED - AULA 5. 12. Prof. Dr. Marcelo Augusto Cicogna.  Função Fatorial: Implementação Recursiva. MainRecur.c. double fatorialRecDouble(int n) /** Função para cálculo do fatorial de um número inteiro. Função recursiva utilizando valores reais (double). @param n valor inteiro para cálculo de seu fatorial. @return Fatorial do número inteiro n passado como parâmetro. Observar o limite numérico de valores double. @version 1.00 @author Marcelo Augusto Cicogna */ { if (n == 0) return ( 1 ); else return ( n * fatorialRecDouble(n-1) ); // ou... return ( (n == 0)? 1 : n * fatorialRecDouble(n-1) ); }. EDUC ©2008 FAV – Estrutura de Dados.. 145-150*.

(7) ANÁLISE DA SÉRIE DE FIBONACCI ED - AULA 5. 13.  Série ou Seqüência de Fibonacci1 Definição: A Seqüência de Fibonacci é a seguinte seqüência de números inteiros: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, .... Prof. Dr. Marcelo Augusto Cicogna. Cada elemento nessa seqüência é a soma dos dois elementos anteriores. De forma geral, o n-ésimo termo da seqüência: Fib (n) = Fib (n-1) + Fib (n-2) Exemplos: a) Fib(0) = 0 (por definição) b) Fib(1) = 1 (por definição) c) Fib(2) = 0 + 1 = 1 d) Fib(3) = 1 + 1 = 2 1Leonardo. Fibonacci (1170 ou 1180 – 1250). http://en.wikipedia.org/wiki/Fibonacci. EDUC 137-138*. ©2008 FAV – Estrutura de Dados.. ANÁLISE DA SÉRIE DE FIBONACCI ED - AULA 5. 14.  Série ou Seqüência de Fibonacci Curiosidades Note uma representação geométrica da Série de Fibonacci. Prof. Dr. Marcelo Augusto Cicogna. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, .... http://en.wikipedia.org/wiki/Fibonacci ©2008 FAV – Estrutura de Dados.. !. Pesquisa: Procure na internet sobre a relação da Série de Fibonacci com fenômenos reais da natureza..

(8) ANÁLISE DA SÉRIE DE FIBONACCI ED - AULA 5. 15.  Série ou Seqüência de Fibonacci ALGORITMO Fibonacci. Prof. Dr. Marcelo Augusto Cicogna. Fib (n: INTEIRO): INTEIRO Início SE (n <= 1) RETORNE ( n ); SENÃO RETORNE ( Fib (n-1) + Fib (n-2) ); Fim FIM_ALGORITMO. Exemplo de Análise da Forma Recursiva: 3. Fib(4) 2. 1. Fib(3) + Fib(2) 1. 1. Fib(2) + Fib(1) 1. 1. A forma recursiva de cálculo dos termos da Série de Fibonacci apresenta um problema de desempenho. Note que o termo Fib(2) é calculado duas vezes, Fib(1) três vezes e Fib(0) duas vezes. O total de chamadas da função Fib() foi de 9, enquanto que a série possui apenas 4 termos. Procure e implemente uma versão direta de cálculo dos termos da Série de Fibonacci.. 0. Fib(1) + Fib(0). 0. Fib(1) + Fib(0). Exercício: Calcule o número de repetições para o cálculo recursivo de Fib(5).. EDUC ©2008 FAV – Estrutura de Dados.. 137-138*. ANÁLISE DA SÉRIE DE FIBONACCI ED - AULA 5. 16. Prof. Dr. Marcelo Augusto Cicogna.  Fibonacci: Implementação Recursiva. MainRecur.c. double fib(int n) /** Função para cálculo do termo n da Série de Fibonacci. Função recursiva utilizando valores reais (double). @param n valor inteiro que identifica o termo da Série de Fibonacci. @return Termo de índice n da Série de Fibonacci. Observar o limite numérico de valores double. @version 1.00 @author Marcelo Augusto Cicogna */ { if (n < 0) return ( -1 ); if (n <= 1) return ( n ); else return ( fib(n-1) + fib(n-2) ); }. EDUC ©2008 FAV – Estrutura de Dados.. 150-152*.

(9) EFICIÊNCIA DA RECURSIVIDADE ED - AULA 5. 17.  Funções Recursivas Análise da Eficiência. Prof. Dr. Marcelo Augusto Cicogna. A implementação recursiva da Função Fatorial demonstrou o uso da recursividade. No entanto, uma versão iterativa também foi apresentada, a qual possui menos demanda por recursos extras (pilhas de chamadas de funções e variáveis locais). Na análise de desempenho da versão recursiva para o cálculo dos termos da Seqüência de Fibonacci observa-se que alguns termos são calculados várias vezes, sendo esses cálculos desnecessários. Questão: Por que usar Recursividade? Leitura: EDUC: pg. 204 –206.. EDUC 204-206*. ©2008 FAV – Estrutura de Dados.. TORRES DE HANOI ED - AULA 5. 18.  Um Problema Interessante. Prof. Dr. Marcelo Augusto Cicogna. A. B. C. Quer tentar? http://funmin.com/online-games/tower-of-hanoi/index.php. Torres de Hanoi: é um problema do tipo quebra-cabeça (puzzle) e consiste em mover a pilha de discos da estaca A para a estaca C, possuindo uma estaca auxiliar B. Cada movimento deve respeitar a seguinte regra: a) Somente o primeiro disco de uma estaca pode ser deslocado para outra; b) Um disco maior não pode ficar posicionado sobre um disco menor.. http://en.wikipedia.org/wiki/Hanoi_tower ©2008 FAV – Estrutura de Dados.. EDUC 164-170*.

(10) TORRES DE HANOI ED - AULA 5. 19.  Análise com Dois Discos. Prof. Dr. Marcelo Augusto Cicogna. A. B. 1 2. C. 1 1. 2. Observação: Veja que se pode mover os discos 1 e 2 para a estaca B usando a estaca C como auxiliar.. EDUC 164-170*. ©2008 FAV – Estrutura de Dados.. TORRES DE HANOI ED - AULA 5. 20.  Análise com Três Discos: Exercício. Prof. Dr. Marcelo Augusto Cicogna. A. B. C. 1 2. 1. 3. 2. 1. Solução para Dois Discos Observação: Note que a solução para três discos pode ser construída a partir da solução de dois discos. Recursão! EDUC. ©2008 FAV – Estrutura de Dados.. 164-170*.

(11) TORRES DE HANOI ED - AULA 5. 21. Prof. Dr. Marcelo Augusto Cicogna.  Algoritmo Recursivo Torres de Hanoi // Solução do Problema Torres de Hanoi. hanoiTowers(n, From, To, Aux) { if (n = 1) moveDisk(1, From, To); else { hanoiTowers(n-1, From, Aux, To ); moveDisk(n, From, To); hanoiTowers(n-1, Aux, To, From); } } Observação: O Algoritmo Recursivo para o problema das Torres de Hanoi é um exemplo de solução eficiente e elegante para um problema. EDUC. ©2008 FAV – Estrutura de Dados.. 164-170*. EXERCÍCIOS PRÁTICOS ED - AULA 5. 22. 6) Exercício Prático de um Problema Recursivo  Implementar o Algoritmo de Solução do problema das Torres de Hanoi do Slide 21 (EDUC: pg. 167).  Para a implementação, crie apenas um arquivo denominado MainHanoi.c. Nesse arquivo implemente a função main(), moveDisk() e hanoiTowers() para a solução do problema (EDUC: pg. 169).. Prof. Dr. Marcelo Augusto Cicogna. Título: Terceiro Trabalho Computacional Assunto: Recursão Entrega: 29/05/2008 Observações: O trabalho pode ser feito em duplas. Os alunos devem entregar uma versão impressa do código fonte dos exercícios (arquivo MainHanoi.c) devidamente preenchidos conforme as normas de formatação (ED Aula 01). -> Coloque no relatório duas ou mais imagens demonstrando o funcionamento do programa. Os alunos que entregarem trabalhos que sejam cópia de outros serão registrados pelo professor para adoção de descontos na nota do exercício e em futuras atividades de correção de outros exercícios, trabalhos computacionais e provas.. ©2008 FAV – Estrutura de Dados..

(12)

Referências

Documentos relacionados

Funções são tão comuns e intuitivas provavelmente você já usou funções no Excel, que mesmo sem definir o que elas são, nós já utilizamos funções nas seções anteriores:

“ENERGIA E ECOSSISTEMAS” Ciclos biogeoquímicos • Ciclo do fósforo pássaros que comem peixes peixes que se alimentam de plâncton ressurgência para uso pelo plâncton fosfato

Gestão da Política Fiscal e Cenário para 2014 e 2015.. A POLÍTICA ECONÔMICA DO GOVERNO EM CENÁRIO EXTERNO DE INCERTEZA O conjunto das políticas públicas implementadas ao longo

· Utilizações identificadas relevantes da substância ou mistura e utilizações desaconselhadas Não existe mais nenhuma informação relevante disponível.. · Utilização

Escrever uma função recursiva que calcula o quociente da divisão euclidiana (inteira) de um inteiro positivo por um outro, sem usar

Dessa forma, Benjamim postula uma verdade para além da história, pois a verdade do passado está naquilo que ele encerra e, por isso, a tarefa do historiador será revelar

Função que, dados uma lista de alunos e um número inteiro não negativo n, remova da lista seus n primeiros alunos e retorne a lista resultante5. Caso n seja maior do que o

Quantos DVDs alugados serão necessários para que essa locadora não tenha prejuízo?.?. Quantos meses serão necessários para que o rendimento seja igual a