Recursividade Prof. Alex F. V. Machado

Slides:



Advertisements
Apresentações semelhantes
Aquiles Burlamaqui AULA 09
Advertisements

Python: Recursão Claudio Esperança.
Programação em Java Prof. Maurício Braga
Complexidade de Algoritmos Recursivos
Recursividade Função recursiva é aquela que chama a si própria.
Recursividade Prof. Rosana Palazon.
Rasterização, Anti-aliasing e Preenchimento
Algoritmos e Estrutura de Dados I
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
Pesquisa Algoritmos de pesquisa recebem um alvo e tentam encontrá-lo dentro de um conjunto de elementos. Recuperação (ou hit): quando o algoritmo encontra.
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Wagner Santos C. de Jesus
Linguagem C Funções.
Linguagem C Estruturas de Seleção.
Matrizes e Funções - Continuação
Algoritmos e Programação
Aula 11 Fábio Nakano.
Aula prática 6 Vetores e Matrizes
Introdução à Programação
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Marco Antonio Montebello Júnior
INTELIGÊNCIA ARTIFICIAL
CADEIA DE CARACTERES (Strings)
Algoritmos Recursivos Klauko Mota. Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
UNIDADE 6 - complemento Funções recursivas
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Orientação a Objetos e Java Graduação em Ciência da Computação
Algoritmos e Estruturas de Dados I – Recursão
Procedimentos e Funções
Algoritmos e Estruturas de Dados I – Recursão
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Wagner Santos C. de Jesus
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Introdução à Linguagem C
DESENVOLVIMENTO WEB II Estruturas de Decisão – IF..ELSE.
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 11) Prof. Alessandro Bernardo.
Aula prática 3 Aprofundando em Funções Parâmetros de uma função Uso do return Execução Variáveis Global, local e estática Monitoria de Introdução à.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
Recursividade Bruno Silva.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Introdução à Programação Aula Prática 2 Operadores e Comandos Condicionais Monitoria
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Recursividade Profs. De Prog2 e Lab2.
INE Fundamentos de Matemática Discreta para a Computação
Algoritmo e Estrutura de Dados I
Linguagem de Programação II Parte VI Professora: Flávia Balbino da Costa.
Ciência da Computação 1 PROGRAMAÇÃO ESTRUTURADA II Profª. Noeli.
Algoritmo e Estrutura de Dados I
Trechos de código que permitem reutilização de uma mesma tarefa. Qualquer código PHP pode estar contido no interior de uma função. Não se pode definir.
Professor Luiz José Hoffmann Filho
Estruturas Homogêneas – Vetores e Matrizes
Linguaguem de Programação II
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Introdução à Computação Gráfica Rasterização
Aula Prática 5 Recursão Monitoria  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estruturas Homogêneas - Vetores
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
Fundamentos de Programação1
Rasterização, Anti-aliasing e Preenchimento
Transcrição da apresentação:

Recursividade Prof. Alex F. V. Machado

Recursão É o equivalente em programação da indução matemática que é uma maneira de definir algo em termos de si mesmo.

Conceito de Recursividade Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente Conceito poderoso –Define conjuntos infinitos com comandos finitos Vantagens –Redução do tamanho do código fonte –Permite descrever algoritmos de forma mais clara e concisa Desvantagens –Redução do desempenho de execução devido ao tempo para gerenciamento de chamadas –Dificuldades na depuração de programas recursivos, especialmente se a recursão for muito profunda

Implementação da Recursividade Usa-se uma pilha para armazenar os dados usados em cada chamada de um procedimento / função que não terminou Todos os dados não globais são armazenados na pilha, informando o resultado corrente Quando uma ativação anterior prossegue, os dados da pilha são recuperados

Recursividade Existe a recursão direta – quando uma função chama a si mesma diretamente. E a recursão indireta – quando uma função chama outra, e esta, por sua vez chama a primeira.

Recursividade Uma função pode ser implementada de forma interativa ou recursiva. – quase sempre a forma recursiva apresenta uma codificação mais simples (reduzida). –Por outro lado, implementações interativas tendem a ser mais eficientes (performance) que as recursivas.

Funções Recursivas contem duas partes principais Ou.... Caso Base e Caso Recursivo

Tipos de Recursão - Recursão Linear - Recursão Binária - Recursão com Múltiplas Chamadas

Exemplo 1: Fatorial /* calculo do fatorial – função recursiva */ int fat(int n) { if (n==1){ return 1; }else{ return n*fat(n-1); }

Exemplo 2: Fibonacci /* calculo do valor fibonacci – função recursiva */ int fibonacci(int t){ if (t==1 || t==2) { return 1; }else{ return fibonacci (t-1)+fibonacci (t-2); }

Exemplo 3: Algoritmo de Preenchimento - Algoritmo recursivo - Preenche vizinhos da semente que atendem ao critério - Aplica o algoritmo recursivamente tomando esses vizinhos como sementes - Termina quando nenhum vizinho atende o critério

Exemplo 3: Algoritmo de Preenchimento /*considerar pixel[] sendo uma matriz global */ void FloodFill (int x, int y, int cor, int novaCor) { If (pixel [x, y] == cor) { pixel [x, y] = novaCor; FloodFill (x + 1, y, cor, novaCor); FloodFill (x, y + 1, cor, novaCor); FloodFill (x - 1, y, cor, novaCor); FloodFill (x, y - 1, cor, novaCor); }

Exercícios: 1. Crie uma função recursiva que calcule a exponenciação de um valor b por um expoente p sem usar o operador de exponenciação. 2. Escreva uma função recursiva que escreva na tela todos os números inteiros positivos desde um valor K informado pelo usuário até Escreva um algoritmo recursivo que escreva na tela a soma de todos os números inteiros positivos de K até Escreva uma função recursiva que calcule a soma de todos os números compreendidos entre os valores A e B passados por parâmetro. 5. Escreva uma função recursiva que calcule os juros compostos de um valor. Para isso o programa deverá ler um valor inicial, o número de meses e a taxa de juros ao mês, e passar estes valores à função como parâmetros. 6. Escreva uma função que faça a procura sequencial de um valor passado por parâmetro num vetor também passado por parâmetro.

Exemplo 4: Potência /*calculo da potencia – função recursiva */ double potencia (float b, int p) { if (p==0) return 1; else return b*potencia(b, p-1); }

Exemplo 5: Busca Binária int busca (int chave, int inicio, int final, int v[]){ int meio; if (inicio >= final){ // se ini == fim return v[final]; } else { meio = (inicio + final)/2; if(v[meio] == chave) return v[meio]; if (v[meio] < chave) return busca (chave, meio + 1, final, v); else return busca (chave, inicio, meio - 1, v); }