Roteiro Prático Nº 13 Recursividade

Documentos relacionados
Recursividade. Estrutura de Dados. Prof. Kleber Rezende

Programação Estruturada

Recursividade. Prof. Jesus José de Oliveira Neto

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

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

Revisão: Tipo Abstrato de Dados Recursividade

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

Linguagem C/C++ Estrutura Condicional. Prof: Rosemary Melo

Puca Huachi Vaz Penna / José Américo T. Messias

Lista de Exercícios sobre Recursividade

MC102 Algoritmos e Programação de Computadores

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

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

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

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

Aula prática 5. Funções Recursivas

Técnicas de análise de algoritmos

PROGRAMAÇÃO DE COMPUTADORES V - TCC Modulo 6 : Funções Escopo de Variáveis: Globais x Locais Aura - Erick

Análise de Algoritmos Parte 4

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Aula 08: Repetição (Parte 3)

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Análise e Complexidade de Algoritmos

INFORMÁTICA APLICADA AULA 05 LINGUAGEM DE PROGRAMAÇÃO C++

Aula 05: - Recursão (parte 1)

Aula 05: - Recursão (parte 1)

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

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

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

Exercícios: Recursão

SCC Capítulo 2 Recursão

Aula 8: Estruturas de Repetição: O comando while

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Aula 05: Condicionais (Parte 2)

5 Funções. Site: BAC004 at Source page: 5 Funções at

Analise o código abaixo:

Processamento da Informação Teoria. Recursividade

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

ALGORITMOS I. Procedimentos e Funções

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

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

Aula 21 - Algoritmos e Funções Recursivas

ESTRUTURAS DE CONTROLE - LAÇOS OU MALHAS DE REPETIÇÃO

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

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

LISTA DE EXERCÍCIOS MÊS 04

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

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

ESTRUTURA COM DECISÃO COMPOSTA

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

Recursividade. Recursividade

BAC004 Informática Teórica T2 Professora: Fabiana Costa Guedes Lista 05 Vetores e Matrizes Vetores

INFORMÁTICA APLICADA AULA 03 LINGUAGEM DE PROGRAMAÇÃO C++

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

Aula 11: Laços e exercícios

Fundamentos de Programação

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

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

Lista de Exercícios 06 Modularização (Procedimentos e Funções)

Treinamento Olimpíada Brasileira de Informática

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

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

Transcrição:

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 Nº 13 Recursividade 1) Objetivos: Definir e apresentar funções recursivas. 2) Livro texto: GUIMARÃES, A. de M., LAGES, N. A. de C. Algoritmos e Estruturas de Dados. 1 ed. Rio de Janeiro: LTC, 2008. 3) Fundamentação Teórica : a) Referência para consulta e estudos: Capítulo 7 do livro texto. b) Definição: (Livro texto seção 7.5) Existem casos em que uma função chama a si própria. Diz-se, então, que a função é recursiva. Por exemplo, o fatorial de um número n pode ser definido recursivamente, ou seja: n! = n (n-1)!, se n 1 1, se n = 0 Pode-se escrever uma função recursiva que traduz essa definição: int fatorial (int n) int fat; if (n == 0 n == 1) // Critério de parada fat = 1; fat = n * fatorial(n-1); // Chamada recursiva return fat; Ilustração 1: Chamadas recursivas iniciando em fatorial(4). Essa representação é chamada de árvore de recursão. Geralmente, o uso da recursividade permite uma descrição mais clara e concisa dos algoritmos, especialmente quando o problema a ser resolvido é de natureza recursiva (Ziviani, 2007). Entretanto, um algoritmo não recursivo equivalente pode ser mais eficaz.

Atenção: Quando uma função chama a si mesma, uma nova cópia da função passa a ser executada. As variáveis locais da segunda cópia são independentes das variáveis locais da primeira; A cada nova chamada da função as anteriores ficam suspensas até está última ser resolvida; Quando a última for resolvida, haverá um retorno sucessivo das chamadas, resolvendo-as uma a uma; Para que uma função recursiva tenha fim, deve-se ter uma condição de parada; Toda função recursiva (ou não) deve possuir pelo menos uma chamada proveniente de um local exterior a ele (chamada externa); Toda função recursiva possui uma correspondente não recursiva; Um algoritmo não recursivo equivalente pode ser mais eficaz. c) Outro exemplo: Sequência de Fibonacci recursiva Na Matemática, Sequência de Fibonacci é uma sequência de números definida recursivamente como: F(n) = 0, se n=0; 1, se n=1; F(n-1) + F(n-2), outros casos. Cada número, a partir do terceiro, é resultado da soma dos outros dois anteriores. int fibonacci (int n) if (n == 0) if (n == 1) return 1; return fibonacci(n-1) + fibonacci(n-2); Ilustração 2: Chamadas recursivas iniciando em fibonacci(3).essa representação é chamada de árvore de recursão. Programa completo em C/C++ com função fibonacci recursiva #include<iostream> using namespace std;

// Protótipos das funções int fibonacci(int); void entrada(int &); int main() int n; entrada(n); cout << "Fibonacci de " << n << "e': " << fibonacci(n); // Chamada à função fibonacci(n) system("pause > null"); void entrada(int &n) cout << "Cálculo de Fibonacci"; do cout << "Entre com valor de n: "; cin >> n; while(n<0); int fibonacci(int n) // Definição da função fibonacci() if (n == 0) // Critério de parada if (n == 1) // Critério de parada return 1; return fibonacci(n-1) + fibonacci(n-2); // Chamada recursiva Programa completo em C/C++ com função fibonacci recursiva INSTRUMENTADA para verificar as chamadas e retornos das funções #include<iostream> using namespace std; // Protótipos das funções int fibonacci(int); void entrada(int &); int main() int n; entrada(n); cout << "\nfibonacci de " << n << "e':" << fibonacci(n); // Chamada à função fibonacci(n) system("pause > null"); void entrada(int &n) // Definição da função entrada() cout << "Cálculo de Fibonacci"; do cout << "\nentre com valor de n: "; cin >> n; while(n<0); int fibonacci(int n) // Definição da função fibonacci() cout << "\nchamando fibonacci(" << n << ")..."; if (n == 0) // Critério de parada

cout << "\nretornando 0..."; // Critério de parada if (n == 1) // Critério de parada cout << "\nretornando 1..."; return 1; // Critério de parada int fib = fibonacci(n-1) + fibonacci(n-2); // Chamada recursiva cout << "\nretornando " << fib << " (fibonacci(" << n-1 << ") + fibonacci(" << n-2 << ")..."; return fib; Ilustração 3: Execução do programa Fibonacci recursivo instrumentado com as mensagens de chamadas e retorno. 4) Roteiro: a ) Digite os exemplos anteriores (Fatorial e Fibonacci), compile-os e execute-os. Nos exemplos com instrumentação de código, faça a árvore de recursão e compare-a com as impressões na tela. b ) O cálculo do M.D.C (Máximo Divisor Comum) pode ser realizado pelo processo das divisões sucessivas. Nesse processo, efetua-se várias divisões até chegar a uma divisão exata. O divisor desta divisão é o M.D.C. Acompanhe o cálculo do M.D.C.(48, 30): Regra prática: 1º) Divide-se o número maior pelo número menor; 48 / 30 = 1 (com resto 18) 2º) Divide-se o divisor 30, que é divisor da divisão anterior, por 18, que é o resto da divisão anterior, e assim sucessivamente; 30 / 18 = 1 (com resto 12)

18 / 12 = 1 (com resto 6) 12 / 6 = 2 (com resto zero - divisão exata) 3º) O divisor da divisão exata é 6. Então M.D.C.(48,30) = 6. Assim, implemente uma função recursiva para o cálculo de M.D.C. Chame essa função na main. Faça também uma função de entrada de dados com sua validação. c ) Sendo: x n = x * x (n-1), n 1 1, n=0 Faça uma função recursiva para o cálculo da potência. Faça também uma função de entrada de dados com validação. d ) Dada a seguinte função recursiva: int X (int n, int m) int y; if (m == n m == 0 n == 0) y = 1; y = X(n-1, m) + X(n-1, m+1); return y; (i) Qual o valor de X(3,2)? Utilize a árvore de recursão para auxiliá-lo. (ii) Quantas chamadas serão realizadas para calcular X(3,2)? e ) Dada a seguinte função recursiva: int X (int n) int y; if (n >= 0 && n <= 2) y = n; y = X(n-1) + X(n-2) + X(n-3); return y; (iii) Qual o valor de X(3)? Utilize a árvore de recursão para auxiliá-lo. (iv) Quantas chamadas serão realizadas para calcular X(3)? (v) Indique a sequência temporal destas chamadas. e ) Escreva uma função não recursiva para a seguinte função: int f (int i) int r;

if (i>1) r = i + f(i-1); r = 1; return r;