Recursividade Prof. Rosana Palazon.

Slides:



Advertisements
Apresentações semelhantes
Estruturas de Dados Listas Prof. Rodrigo Rocha
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Algoritmos de manipulação de estruturas elementares de dados
Listas duplamente encadeadas
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Listas duplamente encadeadas
Recursividade Prof. Alex F. V. Machado
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária
David Menotti Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Pesquisa em Memória Primária – Árvores de Busca
Pesquisa em Memória Primária – Árvores de Busca
Recursividade Conceitos e Aplicações.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Prof.: Sergio Pacheco Estruturas de Dados I Prof.: Sergio Pacheco 1.
Listas com Ponteiros Listas encadeadas Listas circulares.
Linguagem C Estruturas de Seleção.
Slides: Prof. SIMÃO Revisão: Prof. João Fabro
Slides: Prof. João Fabro UTFPR - Curitiba
Lista Encadeada Circular Lista Duplamente Encadeada
Listas Encadeadas.
ALGORITMOS E ESTRUTURAS DE DADOS
exercícios listas encadeadas
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Algoritmos e Estruturas de Dados
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Árvores Binárias de Pesquisa
Heap Sort TPA – Prof. Mateus Costa
Lista Encadeada Circular Lista Duplamente Encadeada
UNIDADE 6 - complemento Funções recursivas
Programação II Estruturas de Dados Aula 02 - continuação
Listas lineares Denise Guliato Faculdade de Computação – UFU
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
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Estruturas de Dados Aula 17: Estruturas Genéricas
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Estruturas de Dados Aula 15: Árvores
Aula 10 Algoritmos de Busca
Prof. Hilton Cardoso Marins Junior ÁRVORES BINÁRIAS.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros.
Ciência da Computação 1 PROGRAMAÇÃO ESTRUTURADA II Profª. Noeli.
Professor Luiz José Hoffmann Filho
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
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.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
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.
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.
Função de buscar elemento na lista simplesmente encadeada
Continuação.
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Transcrição da apresentação:

Recursividade Prof. Rosana Palazon

Recursividade É o nome que se dá quando uma função chama a si própria. 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.

Recursividade Sempre que há uma chamada de função (recursiva ou não) os parâmetros e as variáveis locais são empilhadas na pilha de execução. No caso da função recursiva, para cada chamada é criado um ambiente local próprio. (As variáveis locais de chamadas recursivas são independentes entre si, como se fossem provenientes de funções diferentes).

Recursividade Para se aplicar a recursividade deve-se pensar na definição recursiva do problema. Vejamos o caso do cálculo do fatorial de um número n: Pela definição recursiva temos: n! = 1, se n=0 ou n*(n-1)!, se n>0

Recursividade - fatorial Então teremos a seguinte função: /* calculo do fatorial – função recursiva */ int fatorial (int n) { if (n==0) return 1; else return n*fatorial(n-1); }

Recursividade - Potência Problema: Calcular um valor base (b) elevado a uma potência inteira positiva (p). Definição: se p=0 b^p = 1 se p=1 b^p = b se p>=2 b^p = b*b^(p-1)

Recursividade - 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); }

Recursividade - MDC Problema: Cálculo do mdc entre dois números, usando o algoritmo de Euclides. Lembram-se da versão interativa?

Versão Interativa do MDC int mdc(int a, int b) { int r; r = a % b; while (r ! = 0){ a = b; b = r; } return b;

Definição do problema do MDC Definição recursiva para o MDC: mdc(a, b) = b se b divide a, ou seja a%b = 0 mdc(b, a%b) caso contrário

Solução recursiva do MDC int mdc_recursiva(int a, int b) { if (a % b == 0) return b; return mdc_recursiva (b, a % b); }

Percurso em lista simplesmente ou duplamente encadeada. typedef struct lista { int info; struct lista *ant, *prox;} sendo Lista* p, um ponteiro para o inicio da lista. se p==NULL significa: fim da lista, ou lista vazia caso contrário escrever conteúdo do nó da lista

Solução interativa de percurso em lista void mostra_lista (Lista* p) { Lista *aux; for(aux=p; aux!=NULL;aux=aux->prox) { printf (“%d\t”, aux->info); }

Solução recursiva de percurso em lista void mostra_lista_recursivo1(Lista* p) { if (p==NULL) return; else { //desnecessário após return printf (“%d\t”, p->info); mostra_lista_recursivo(p->prox); } OU 

Solução recursiva de percurso em lista void mostra_lista_recursivo2 (Lista* p) { if (p!=NULL) { printf (“%d\t”, p->info); mostra_lista_recursivo(p->prox); }

Exercícios: 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. 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. 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. Escreva uma função que faça a procura sequencial de um valor passado por parâmetro numa lista simplesmente encadeada cujo ponteiro para o valor inicial foi passado por parâmetro. Escreva uma versão recursiva do bubble sort.