Aula 05: - Recursão (parte 1)

Documentos relacionados
Aula 05: - Recursão (parte 1)

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

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

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

1. Para cada pergunta selecione uma opção. Resposta correta +2, incorreta -1. [12 pontos]

Processamento da Informação Teoria. Recursividade

Técnicas de análise de algoritmos

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

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

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

Aula prática 5. Funções Recursivas

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

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

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

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

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

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

Aula 13: Listas encadeadas (estruturas lineares)

SCC Capítulo 2 Recursão

Complexidade de Algoritmos

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

Exercícios: Recursão

Programação Estruturada

Solução de Recorrências

Análise de Complexidade para algoritmos iterativos e recursivos

Algoritmos e Estruturas de Dados I. Recursividade. Pedro O.S. Vaz de Melo

Material preparado a partir de slides dos profs. Jesús Mena-Chalco e Fabrício Olivetti

Aula 07: Algoritmos de busca e Listas encadeadas

Roteiro Prático Nº 13 Recursividade

Matemática Computacional

Teoria da Computação. Aula 4 Técnicas de Análise 5COP096. Aula 4 Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr

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

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

Estruturação de Procedimentos

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

Multiplicação de inteiros

Limite assintótico para a ordenação, Ordenação em tempo linear

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

Introdução à Programação / Programação I

Programação dinâmica

MCTA028 Programação Estruturada Aula 19 Custos de um algoritmo e funções de complexidade

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

Programação Funcional Cálculo Lambda - Aula Nº 3

Recursividade, Tentativa e Erro

Análise e Complexidade de Algoritmos

BCC402 Algoritmos e Programação Avançada Prof. Marco Antonio M. Carvalho Prof. Túlio Ângelo M. Toffolo 2011/1

Aula 01 Introdução Custo de um algoritmo, Funções de complexidad e Recursão

Algoritmos e Lógica de Programação. 6ª Lista de Exercícios Comandos de Repetição

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

1. Se v é um vetor, qual a diferença conceitual entre as expressões v[70] e v+70? [2 ponto]

MCTA028 Programação Estruturada Aula 20 Exercícios de custos de um algoritmo

Análise de Algoritmos Parte 4

Lista de Exercícios sobre Recursividade

1. Faça um programa que leia uma string digitada pelo usuário e salve em um arquivo em branco.

Trabalho Prático 1. Valor: 1,0 pontos (10% da nota total) Data de Entrega: 02/05/2010

Análise e Projeto de Algoritmos

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

Métodos de Pesquisa Operacional

Recursividade. Prof. Jesus José de Oliveira Neto

Aula 02: Custos de um algoritmo e funções de complexidade

Comparação com Divisão e Conquista

ANÁLISE DE ALGORITMOS

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO MARANHÃO - CAMPUS CAXIAS. Aluno (s): 01 ATIVIDADE. Revisão de Conteúdo

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

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

ESTRUTURAS DE REPETIÇÃO - PARTE 1

Universidade Federal de Uberlândia Faculdade de Computação. Estruturas de repetição

SCC0601 Projeto de Algoritmos. Recursão

Recursão PROGRAMAÇÃO EM LÓGICA. Recursão. Sonho Recursivo. Recursão. Recursão. Linguagem Prolog Parte IV

Aula 19 Conjuntos disjuntos (Union-find)

Transcrição:

MCTA028 Programação Estruturada Aula 05: - Recursão (parte 1) Prof. Jesús P. Mena-Chalco jesus.mena@ufabc.edu.br 3Q-20107 1

Recursão: Se você ainda não entendeu; Ver: "Recursão".

Efeito Droste Anuncio de cacão com uma imagem recursiva. 4

Recursão O conceito de recursão é de fundamental importância em computação! Muitos problemas computacionais têm a seguinte propriedade: Cada instância do problema contém uma instância menor do mesmo problema. Dizemos que esses problemas têm estrutura recursiva. (*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. 6

Recursão Para resolver um tal problema é natural aplicar o seguinte método: Se a instância em questão é pequena: Resolva-a diretamente (use força bruta se necessário) Senão Reduza-a a uma instância menor do mesmo problema Aplique o método à instância menor e volte à instância original. A aplicação do método produz um algoritmo recursivo. (*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. 7

A recursão pode ser infinita. Não esqueça de definir o caso base (condição de parada) https://www.youtube.com/watch?v=anf0vsdhi4c Fonte: http://en.wikipedia.org/wiki/recursion

https://oeis.org/

Fatorial de um número 11

Fatorial de um número Considere a função fatorial (representado por n!) para um número inteiro, n, não-negativo arbitrário 12

Fatorial de um número Número de vezes em que a função Fatorial é chamada? 13

Fatorial de um número Número de vezes em que a função Fatorial é chamada? n+1 14

Fatorial Primorial O primorial de um número inteiro positivo n é o produto de todos os primos menores ou iguais a n. É denotado por n# https://en.wikipedia.org/wiki/primorial [LAB] Crie uma função recursiva que, dado um número inteiro positivo, devolva: (a) o seu Primorial. (b) o número de multiplicações necessárias para calcular seu primorial. 15

Somatório de números 16

Um exemplo de somatória Dados dois número inteiros, n e k, crie uma função iterativa para calcular a seguinte somatória: 17

Um exemplo de somatória $ gcc somatoria.c lm o somatoria.exe $./somatoria.exe 4 20 1102999460754 18

Um exemplo de somatória Dados dois número inteiros, n e k, crie uma função iterativa para calcular a seguinte somatória: 19

Um exemplo de somatória Dados dois número inteiros, n e k, crie uma função iterativa para calcular a seguinte somatória: 20

n=4, k=99

n=4, k=99 4⁹⁹ + n=3, k=99

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + n=2, k=99

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + n=2, k=99 2⁹⁹ + n=1, k=99

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + n=2, k=99 2⁹⁹ + n=1, k=99 1⁹⁹ + n=0, k=99

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + n=2, k=99 2⁹⁹ + n=1, k=99 1⁹⁹ + 0

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + n=2, k=99 2⁹⁹ + 1⁹⁹+0 1⁹⁹ + 0

n=4, k=99 4⁹⁹ + n=3, k=99 3⁹⁹ + 2⁹⁹+1⁹⁹+0 2⁹⁹ + 1⁹⁹+0 1⁹⁹ + 0

n=4, k=99 4⁹⁹ + 3⁹⁹+2⁹⁹+1⁹⁹+0 3⁹⁹ + 2⁹⁹+1⁹⁹+0 2⁹⁹ + 1⁹⁹+0 1⁹⁹ + 0

4⁹⁹+3⁹⁹+2⁹⁹+1⁹⁹+0 4⁹⁹ + 3⁹⁹+2⁹⁹+1⁹⁹+0 3⁹⁹ + 2⁹⁹+1⁹⁹+0 2⁹⁹ + 1⁹⁹+0 1⁹⁹ + 0

4⁹⁹+3⁹⁹+2⁹⁹+1⁹⁹+0 4⁹⁹ + 3⁹⁹+2⁹⁹+1⁹⁹+0 3⁹⁹ + 2⁹⁹+1⁹⁹+0 2⁹⁹ + 1⁹⁹+0 1⁹⁹ + 0

Um laço e um acumulador Sem laço e sem acumulador?

Matrioska 33

Matrioska 34

Função recursiva Uma função recursiva é definida em seus próprios termos. Toda função pode ser escrita como função recursiva sem o uso de interação (laços). Reciprocamente, qualquer função recursiva pode ser descrita através de interações sucessivas. Ingredientes: Definição de casos bases (que não envolvem recursão) Passos recursivos, com decremento na entrada, no sentido do caso base. 35

Recursão Para resolver um tal problema é natural aplicar o seguinte método: Se a instância em questão é pequena: Resolva-a diretamente (use força bruta se necessário) Senão Reduza-a a uma instância menor do mesmo problema Aplique o método à instância menor e volte à instância original. A aplicação do método produz um algoritmo recursivo. (*) Fonte: P. Feofiloff. Algoritmos em Linguagem C. 1ª Edição, Editora Campos, 2008. 36

Números de Fibonacci 37

Números de Fibonacci (*) fonte http://britton.disted.camosun.bc.ca/fibslide/jbfibslide.htm 38

Números de Fibonacci 39

Números de Fibonacci Função é duplamente recursiva (efetua mais de uma chamada a Fib 40

Números de Fibonacci 41

Números de Fibonacci Fib (5) Fib (4) Pensou na eficiência da abordagem recursiva? 42

Números de Fibonacci Fib (6) Fib (5) Fib (4) Fib (4) Qual o número de vezes que a função Fib é chamada? Fib (7) Fib (6) Fib (5) Fib (4) Fib (4) Fib (5) Fib (4) Fib (8) Fib (7) Fib (6) Fib (5) Fib (4) Fib (4) Fib (5) Fib (4) Fib (6) Fib (5) Fib (4) Fib (4) Fib (9) Fib (8) Fib (7) Fib (6) Fib (5) Fib (4) Fib (4) Fib (5) Fib (4) Fib (6) Fib (5) Fib (4) Fib (4) Fib (7) Fib (6) Fib (5) Fib (4) Fib (4) Fib (5) Fib (4) 43

Números de Fibonacci n 10 20 30 50 100 Recursivo 8 ms 1 seg 2 min 21 dias 109 anos Iterativo 1/6ms 1/3ms ½ ms ¾ ms 1,5 ms Fonte: Brassard and Bradley (1996) apud ZIVIANI 44

Números de Fibonacci Os números de Fibonacci foram propostos por Leonardo di Pisa (Fibonacci), em 1202, como uma solução para o problema de determinar o tamanho da população de coelhos (*) fonte http://www.oxfordmathcenter.com/drupal7/node/487 45

Número de digitos binários 46

Número de digitos binários Crie uma função que calcula o número mínimo de digitos binários para representar um número inteiro decimal positivo n. 138 é representado com, no mínimo, 8 dígitos binários 47

Número de digitos binários 48

Número de digitos binários Número de vezes em que a função bin é chamada? 49

Número de digitos binários Número de vezes em que a função bin é chamada? floor(log2(n)) 50

Recursividade é uma das coisas mágicas e interessantes em Lógica de Programação

Teste de avaliação 52

Questão 1 Qual é o resultado da execução das seguintes funções para n=5? Resposta de conta1 para n=5 5 4 3 2 1 Resposta de conta2 para n=5 1 2 3 4 5 53

Questão 2 Indique o que devolvem as funções F1 e F2 para valores de: a=2, k=5. Construa sua representação matemática recursiva. Descreva em português o que calcula cada função. Ambas as funções calculam a^k. Para a=2, e b=5 a funçãodevolve 32. F2 é mais eficiente! 54

Questão 3 Descreva em português o que calcula a função M. Qual o número total de comparações? A função M, dada um vetor v[0,,n-1] de n elementos devolve o menor valor contido em v. Número de comparações = n 55

Questão 4 Escreva uma versão iterativa da função M. Versão iterativa 56

Recursão Uma função recursiva é aquela que se chama a si mesma (obrigatoriamente)? 57

Recursão Uma função recursiva não necessariamente é aquela que se chama a si mesma F1(...) F2(...) F3(...). F1(.) 58

Análise de algoritmos recursivos Para fazer a análise é necessário obter a relação de recorrência. A fórmula fechada (resolução) da recorrência pode ser obtida por diferentes abordagens, por exemplo: Árvore de recorrência Método mestre Funções geradoras 59