Algoritmo e Estrutura de Dados I

Slides:



Advertisements
Apresentações semelhantes
Aquiles Burlamaqui AULA 09
Advertisements

Marco Antonio Montebello Júnior
TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Recursividade Prof. Rosana Palazon.
Recursividade Prof. Alex F. V. Machado
Aula 1 Tipo Abstrato de Dados
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Recursividade Conceitos e Aplicações.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
Linguagem C Funções.
Linguagem C Estruturas de Seleção.
Matrizes e Funções - Continuação
Slides: Prof. João Fabro UTFPR - Curitiba
Linguagem de Programação
Vetor de Ponteiros Exemplo de Alocação. Escrever Vetor de Vetores de floats int main() { int i, k, n; float **vetor; // vetor de vetores int *tamanho;
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
VETORES Roteiro da aula Referência ao Programa: Estrutura de Dados
VETORES Roteiro da aula Referência ao Programa: Estrutura de Dados
PROGRAMAÇÃO ESTRUTURADA II
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
PROGRAMAÇÃO I UNIDADE 4.
Programação II Estruturas de Dados Aula 02 - continuação
Algoritmos e Programação I
Estruturas de Dados Módulo 3 – Controle de Fluxo
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Recursão.
Algoritmo e Programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014
Linguagem de Programação
Algoritmos e Estruturas de Dados I – Recursão
Estruturas de Dados Aula 14: Recursão 04/06/2014.
Recursão Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Exemplo Cálculo do fatorial de um número:
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Introdução à Linguagem C
Torre de  Hanói.
Comando de Seleção switch
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo III Comandos de Controle.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo IX Subprogramação e Recursividade.
Recursividade Profs. De Prog2 e Lab2.
Alinhamento de Cadeias de DNA COMPARAÇÃO DE SEQÜÊNCIAS
Algoritmos e Programação MC102
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Algoritmos e Programação MC102
Algoritmo e Estrutura de Dados I
Algoritmo e Estrutura de Dados I
Programação Computacional Aula 9: Meu primeiro programa em C
Profº Antonio Carlos Marcelino de Paula
Algoritmo e Estrutura de Dados I
Algoritmo e Estrutura de Dados I Aulas 12 – Linguagem C Strings Márcia Marra
Professor Luiz José Hoffmann Filho
PCI- Funções e Procedimentos Profa. Mercedes Gonzales Márquez.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Funções.
Algoritmo e Estrutura de Dados I Aulas 14 – Linguagem C Matriz Márcia Marra
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.
PCI- Vetores Profa. Mercedes Gonzales Márquez. Aula 5 - VetoresAlgoritmos e Estruturas de Dados I Sequência de valores todos do mesmo tipo Nome único.
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.
Algoritmo e Estrutura de Dados I Linguagem C – Comandos if-else-if e Switch Márcia Marra.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
Fundamentos de Programação 1 Aula N. 02 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Laços de Repetição em C”
1Unidade 04 – Estruturas de Repetição Algoritmos e Linguagens de Programação Estruturas de Repetição Prof.: Guilherme Baião S. Silva
Recursividade e análise Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estruturas Homogêneas - Vetores
1 Aula 07 Strings Prof. Filipe Mutz. 2 Em nossos programas ainda não vimos como armazenar palavras e textos, e eles são muito importantes! Exemplos: Programas.
Un2 – seção3 - Estruturas Condicional Composta Algoritmos e Lógica de Programação (Aula Prática - 02/05/16) 1 Vídeo Aula 5 e 6 (aula prática) 02/05/16.
Un2 – seção3 - Estruturas Condicional Composta Algoritmos e Lógica de Programação (Aula Prática - 02/05/16) 1 Vídeo Aula 5 e 6 (aula prática) 24/03/16.
INF1007: Programação Funções Recursivas
Transcrição da apresentação:

Algoritmo e Estrutura de Dados I Aulas 17 – Recursividade Márcia Marra marsha@dcc.ufmg.br

Recursividade Simplificam a solução de alguns problemas Geralmente deixam o código mais conciso São mais lentas que as funções iterativas Erros na implementação podem levar a “estouro” de pilha Exemplos clássicos: Cálculo de fatorial; Série de Fibonacci; Jogo da Torre de Hanoi

Fatorial Ex: Fatorial de 4

Fatorial - Solução #include <stdio.h> int fat (int n) { if ( n =0) return 1; else return n * fat (n-1); } int main() { int num; printf("\nDigite um valor para n: "); scanf("%d", &num); printf("\nO fatorial de %d é %d", num, fat(num)); return 0;

Execução

Fibonacci A série de Fibonacci é formada de maneira que o elemento seguinte é composto pela soma dos dois elementos anteriores. 1, 1, 2, 3, 5, 8, 13, 21 ... Fib (0) = 0 Fib (1) = 1 Fib (n) = Fib (n-1) + Fib (n-2)

Fibonacci - Solução #include <stdio.h> int fib (int n) { if ( n==0) return 0; else if (n==1) return 1; else return fib(n-1)+ fib(n-2); } int main() { int num; printf("\nEntre com um valor para n: "); scanf("%d", &num); printf("\nFibonacci é %d", fib(num)); return 0;

Execução

Torre de Hanoi Considere três hastes, A, B e C. Na haste A encontram-se n discos, com tamanhos diferentes, arrumados do menor maior, de cima baixo; Deve-se passar todos os discos da haste A para a haste B, usando a haste C como auxiliar e seguindo algumas regras.

Torre de Hanoi Regras do Jogo: Somente um disco pode ser movido de cada vez. Nenhum disco pode ser colocado sobre um disco menor. Qualquer disco pode ser movido de qualquer haste para qualquer outra haste, desde que respeitada a regra 2.

Torre de Hanoi - Recursividade Suponha 4 discos, como no desenho abaixo. Monte a pilha de execução para este exemplo.

Torre de Hanoi – pilha de execução Disco 1 de A para C Disco 2 de A para B Disco 1 de C para B Disco 3 de A para C Disco 1 de B para A Disco 2 de B para C Disco 4 de A para B Disco 2 de C para A Disco 3 de C para B

Torre de Hanoi - Solução #include <stdio.h> int torre (int disco, char de, char para, char aux){ if (disco == 1) printf ("\nMover disco %d da torre %c para a torre %c", disco, de, para); else { torre (disco-1, de, aux, para); printf ("\nMover disco %d da torre %c para a torre %c", disco, de, para); torre (disco-1, aux, para, de); } return(0);

Torre de Hanoi - Solução int main () { int num; printf ("Digite a quantidade de discos da torre A: "); scanf ("%d", &num); torre (num, 'A', 'B', 'C'); return(0); }

Execução

Execução 2

Teste Surpresa Use a função puzzle abaixo para responder as perguntas: int puzzle(int base, int limit) { //base and limit are nonnegative numbers if ( base > limit ) return -1; else if ( base == limit ) return 1; else return base * puzzle(base + 1, limit); } Identifique os casos base da função puzzle(); Identifique o caso recursivo da função puzzle(); Mostre a pilha de execução e o que será impresso pelas seguintes chamadas: printf(“%d\n”, puzzle(14,10)); printf(“%d\n”, puzzle(4,7)); printf(“%d\n”, puzzle(0,0));