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

Documentos relacionados
Recursividade. Prof. Jesus José de Oliveira Neto

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

Algoritmos e Estruturas de Dados

Estrutura de Dados Conceitos Iniciais

Algoritmos e Estruturas de Dados I

Prof. A. G. Silva. 25 de setembro de Prof. A. G. Silva INE5603 Introdução à POO 25 de setembro de / 35

Algoritmos e Estruturas de Dados

Programação Estruturada

Recursividade. Estrutura de Dados. Prof. Kleber Rezende

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

Revisão: Tipo Abstrato de Dados Recursividade

SCC0214 Projeto de Algoritmos

Programação. Prof Marcelo Zorzan Prof a Melissa Zanatta

Recursão David Déharbe

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

Algoritmos e Estruturas de Dados I Linguagem C

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

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

SCC Capítulo 2 Recursão

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

Algoritmos e Modelação Computacional. Paulo Mateus MEBiom LMAC 2018

Simulado de Linguagem de Programação Java

IO.println(a+" * "+b+" = "+produto); } }

Seleção Múltipla Laços (while, do-while, for) AULA 05

Tentativa e Erro (Backtracking)

Programação científica C++

LÓGICA DE PROGRAMAÇÃO (JAVA) ESTRUTURAS REPETIÇÃO. Professor Carlos Muniz

Lista de Exercícios sobre Recursividade

Pesquisa e Ordenação

ÁRVORES ABB (ÁRVORES BINÁRIAS DE BUSCAS) Sérgio Carlos Portari Júnior

Aula 05. Modularização Função Subrotina Recursividade

Processamento da Informação

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

Análise de Algoritmos Parte 4

SCC0601 Projeto de Algoritmos. Recursão

Sintaxe Básica de Java Parte 2

Algoritmos e Estruturas de Dados I IEC012. Procedimentos e Funções. Prof. César Melo Todos os créditos para o professor Leandro Galvão

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

Introdução a Algoritmos Parte 08

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

Roteiro Prático Nº 13 Recursividade

Aula prática 5. Funções Recursivas

Fundamentos de programação

Processamento da Informação Teoria. Recursividade

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

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

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

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Árvores. A Profundidade da Árvore B C D E. Árvores Implementação Genérica

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

Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Árvores & Árvores Binárias

Universidade Federal de Mato Grosso Estrutura de Dados II

Análise e Complexidade de Algoritmos

ÁRVORES BINÁRIAS DE BUSCA. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Linguagem de programação métodos/funções

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

ESTRUTURA DE DADOS (TCC )

Departamento de Ciência de Computadores Estruturas de Dados (CC114)

Tipos de dados e comandos POO

Árvores. Estruturas de Dados. Prof. Vilson Heck Junior

Fontes Bibliográficas. Estruturas de Dados Aula 15: Árvores. Livros:

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

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

Métodos de ordenação. Bubble sort:

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Variáveis primitivas e Controle de fluxo

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

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Programação de Computadores II TCC /Turma A 1

Programação Estruturada Prof. Rodrigo Hausen Recursão

Aula 4 Estruturas de Controle

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

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

Introdução à Programação

Técnicas de análise de algoritmos

CCM0118 Computação I Curso de Ciências Moleculares Turma 22 Segundo Semestre de 2012 Segunda Prova 25 de outubro de 2012

Análise de Complexidade para algoritmos iterativos e recursivos

Métodos e Procedimentos. Prof. Jesus José de Oliveira Neto

Organizam dados de forma hierárquica. Acontecem com frequência na natureza. Fáceis de representar e manipular com computadores

Prof. Jesus José de Oliveira Neto

Arrays em Java. Introdução à Programação. Bruno Cartaxo

Algoritmos I Aula 14 Java: estruturas de seleção e repetição

INF 1010 Estruturas de Dados Avançadas. Árvores binárias

Universidade Estadual de Santa Cruz

Estruturas de Dados. Módulo 17 - Busca. 2/6/2005 (c) Dept. Informática - PUC-Rio 1

Estruturas de Dados. Revisão de Funções e Recursão. Agradecimentos

ÁRVORES E ÁRVORES BINÁRIAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

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

Algoritmos e Estruturas de Dados I 01/2013. Vetores e Recursividade. Pedro O.S. Vaz de Melo

Programação II. Árvores Binárias (Binary Trees) Bruno Feijó Dept. de Informática, PUC-Rio

Estruturas de Dados II

Estruturas de Dados Aula 14: Recursão

Estruturas de Dados Aula 14: Recursão 19/05/2011

Módulo 7. Funções. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Lógica de Programação e Algoritmos com exemplos na linguagem JAVA

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Transcriçã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 Em programação, é o fato de um método invocar ele mesmo. Exemplos clássicos Fractais Torre de Hanoi Fatorial Fibonnaci Exemplos em http://www.krazydad.com/bestiary/bestiary_fern.html 3 Recursividade: aplicações Algoritmos de ordenação (sort) Busca em árvores Transformada rápida de Fourier utilizada em processamento de sinais Imagens de síntese Fonte http://www.cs.princeton.edu/introcs/23recursion 4 2

Exemplo de recursividade: fatorial É um função matemática recursiva, pois é definida em função dela mesmo Se n > 1 então n! = n * (n-1)! Se (n 0 or 1) então n! = 1 De outra forma se (n==0 or n==1) fatorial(n) = 1 se (n > 1) fatorial(n) = n * fatorial(n-1) 5 Exemplo: fatorial public class JFatorial { public static int fatorial(int n) { if (n == 1 n == 0) return 1; return n * fatorial(n-1); public static void main(string args[]) { int n=1; if (args.length > 0) { n = Integer.parseInt(args[0]); if (n > 0) System.out.println("Fatorial de " + n + " = " + fatorial(n)); 6 3

Exemplo: fatorial ao executar: java JFatorial 5 fatorial(5) fatorial(4) fatorial(3) fatorial(2) fatorial(1) return 1 return 2*1 return 3*2 return 4*6 return 5*24 PILHA (STACK) DE CHAMADA Fatorial(5) Fatorial(4) Fatorial(3) Fatorial(2) Fatorial(1) topo base 7 Exemplo fatorial: pontos importantes Caso base: retorna um valor calculado sem recursão public static int fatorial(int n) { if (n == 1 n == 0) return 1; return n * fatorial(n-1); Passo de redução: os valores dos argumentos da invocação recursiva devem convergir para o caso base stack overflow 8 4

Exercícios Até qual número é possível calcular antes de estourar a capacidade de armazenamento de um tipo de dado inteiro? Modifique o programa fatorial para que ele imprima a cada execução do método fatorial(int n) o valor de n no início do método e o valor retornado ao final. A cada chamada, os valores impressos devem ser identados em uma posição: *N = 3 **N = 2 ***N = 1 ***return 1 **return 2 *return 6 9 Exercícios Implemente a série de Fibonacci de maneira recursiva e não recursiva. Compare os tempos de execução para séries grandes Exemplo para N = 7 1: 1 = 1 2: 1 = 1 3: 2 = fib(2) + fib(1) 4: 3 = fib(3) + fib(2) 5: 5 = fib(4) + fib(3) 6: 8 = fib(5) + fib(4) 7: 13 = fib(6) + fib(5) Tecno-OO\RepositorioJAVA\JRecursividade\JFibonacci 10 5

Exercício Fibonacci: solução public class Fibonacci { public static long fib(int n) { if (n <= 1) return n; else return fib(n-1) + fib(n-2); public static void main(string[] args) { int N = Integer.parseInt(args[0]); System.out.println("*** recursivo ***"); for (int i = 1; i <= N; i++) System.out.println(i + ": " + fib(i)); Problema: tempo é exponencial Sol. http://www.dainf.ct.utfpr.edu.br/~tacla/javarepositorio/jrecursividade/jfibonacci 11 Fibonacci tempo exponencial Para calcular f(1) => 1 iteração F(2) = 1 F(3) = f(2) + f(1) = 2 F(4) = f(3) + f(2) = 2 + 1 = 3 F(5) = f(4) + f(3) = 3 + 2 = 5 F(6) = f(5) + f(4) = 5 + 3 = 8 F(7) = f(6) + f(5) = 8 + 5 = 13 F(8) = f(7) + f(6) = 13 + 8 = 21 F(9) = f(8) + f(7) = 21 + 13 = 34 F(10) = f(9) + f(8) = 34 + 21 = 55 12 6

Fibonacci tempo exponencial 60 50 40 Iterações 30 20 10 0 1 2 3 4 5 6 7 8 9 10 ordem 13 Fibonacci: solução iterativa public class FibonacciIterativo { public static void main(string[] args) { int N = Integer.parseInt(args[0]); long ultimo = 0; long penultimo = 1; long atual = 1; for (int i = 1; i <= N; i++) { atual = ultimo + penultimo; penultimo = ultimo; ultimo = atual; System.out.println(i + ": " + atual); Sol. http://www.dainf.ct.utfpr.edu.br/~tacla/javarepositorio/jrecursividade/jfibonacci 14 7

Exercício quadrados recursivos Faça um algoritmo recursivo que reproduza o padrão: 15 Árvore Árvore: é uma estrutura de dados onde os dados estão organizados de forma hierárquica. filho raiz filho É composto por um nó raiz e, normalmente, por vários nós filhos. folha folha folha Um nó que não possui filhos é dito folha. 16 8

Árvore binária Árvores binárias satisfazem aos critérios: Não possuem nós (árvores vazias) ou Apresentam um nó raiz que aponta para duas sub-árvores, a da esquerda e a da direita. folha filho folha raiz filho folha É um grafo acíclico dirigido cujos nós tem grau zero, um ou dois Observar que a definição é recursiva! 17 Árvores de busca binária Linda Carla Norton André Mário Xavier Percurso em ordem: André, Carla, Linda, Mário, Norton, Xavier Quantas nós devem ser visitados para se encontrar Xavier? Xavier < Linda? Não, então busque na sub-árvore direita Xavier < Norton? Não, então busque na sub-árvore direita Xavier (3 nós) 18 9

Exercício classificação 1: travessia de árvore binária Faça um algoritmo recursivo que permita percorrer uma árvore de classificação binária em ordem crescente ou decrescente segundo um argumento passado na linha de comando. Dicas Criar uma classe Nodo Um nodo aponta para o nodo da esquerda e da direita 19 Exercício classificação 2: Busca de um nodo em árvore binária Faça um algoritmo recursivo que permita buscar um certo nodo numa árvore de classificação binária por valor. Exemplo: Buscar nodo cujo nome seja Clara Se o nodo buscado não existir, retornar null 20 10

Exercício gramática Fazer um analisador de expressões artiméticas utilizando a grámática recursiva abaixo Gramática exp := exp + termo exp termo termo termo := termo * num termo / num num num := 0 1 2 3 4 5 6 7 8 9 21 Exemplo 1 2 + 3*5 é válida segundo a gramática? exp exp + termo num 2 termo num 3 termo * num 5 sim 22 11

Exemplo 2 5 + -5 é válida segundo a gramática? exp termo exp + termo Não é possível gerar -5 com esta gramática a partir de um termo num 5 não 23 12