Recursividade

251 visualizações

Publicada em

Aula sobre recursividade

Publicada em: Educação
1 comentário
1 gostou
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
251
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
4
Comentários
1
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Colocar fundo quadro negro
  • Substituir pelo fibonacci
  • Recursividade

    1. 1. Recursividade Raphael Leite Campos IFRS
    2. 2. Nossa Aula de Hoje! Conteúdo • Lembram de Funções? Que tal revisarmos um pouco? • Objetivos • Definição Recursividade • Como aplicar a Recursão a um problema? • O que compõe uma solução recursiva? • Vamos praticar um pouco!!! • Vamos comparar a abordagem Recursiva Vs Iterativa? Será que há vantagem de alguma? • Desafio pra Casa (Torre de Hanói)!!!
    3. 3. Revisão de Funções • Funções ou subprogramas – Blocos de instruções que realizam tarefas específicas e repetitivas; • Objetivo: Subdividir os programas permite uma codificação menor e mais organizada. – diminuindo os efeitos colaterais de erros; – facilita a manutenção do código; – facilita o teste de código.
    4. 4. Revisão de Funções • Como definir uma função? – tipo_retorno nome_funcao(tipo parametro, tipo param){ Corpo função };
    5. 5. Objetivos da Aula de Hoje Aprender o que é recursão, a aplicar a abordagem recursiva para a solução de problemas. Desenvolver uma solução recursiva saber diferenciá-la de uma abordagem iterativa.
    6. 6. Definição de Recursividade Fonte: http://pensamentocomputacional.blogspot.com.br/
    7. 7. Definição de Recursividade Uma solução computacional é recursiva quando é utilizada uma função que chama a si mesma, dentro de si, repetidas vezes, para compor a solução de um problema.
    8. 8. Aplicações de Recursividade • Algoritmos de Busca e Ordenação: Quick Sort, Merge Sort, Pesquisa Binária • Inteligência Artificial
    9. 9. Aplicação da Recursão • Como aplicar a Recursão a um problema? • Fatorial – 5! = 5*4*3*2*1 = 120 – n! = n*(n-1)*(n-2)*...*1 – 0! e 1! = 1 !!!Vamos ao Código!!!
    10. 10. Aplicação da Recursão #include <stdio.h> unsigned long fatorial( unsigned long num ) { if ( num <= 1 ) // teste para o caso base return 1; // casos base: 0! = 1 and 1! = 1 else // passo da recursão return num * fatorial( num - 1 ); } // fim da função fatorial
    11. 11. Solução Recursiva • Caso Base Fatorial – if ( numero <= 1 ) return 1; • Passo da Recursão/Operação repetida – n*(n - 1)*(n – 2)... • Retro Propagação dos resultados – return numero * factorial( numero - 1 );
    12. 12. Vamos a prática! #include <stdio.h> int misterio( int, int ); // Protótipo da função int main() { int x, y; printf(“Informe dois númeroos"); scanf("%d %d", &x, &y); printf(“O resultado é %i “, misterio( x, y )) } // end main // Parâmetro b deve ser positivo para não haver recursão infinita int misterio( int a, int b ) { if ( b == 1 ) return a; else return a + misterio( a, b - 1 ); } // fim da função misterio O que o programa faz?Qual o caso base? Qual a passo da recursão?
    13. 13. Serie Fibonacci • Serie encontrada na natureza, descreve a forma do espiral • É considerada uma medida de ouro e aplicada na arquitetura, na proporção entre comprimento e largura, bem como em cartões postais. Entre outras aplicações • Serie é composta pelos seguintes termos: – {0, 1, 1, 2, 3, 5, 8, 13, ...}
    14. 14. Recursão int fibonacci(int n); int main(){ int L, i; //Solicitar ao usuário o número de termos printf("Digite o número de termos"); scanf("%d",&L); for (i=0; i < L; i++){ printf("%i t", fibonacci(i)); } } int fibonacci(int n){ if (n == 0 || n ==1) return n; return fibonacci(n-1) + fibonacci(n-2); } Iteração int main(){ int a1=0,a2=1,a3,L; //Solicitar ao usuário o número de termos printf("Digite o número de termos"); scanf("%d",&L); if(L == 1) printf(" %d ",a1); else if (L > 1) printf("%d %d ",a1,a2); while( L > 2 ){ L--; a3 = a1 + a2; a1 = a2; a2 = a3; printf(" %d ",a3); } } } Abordagem Recursiva x Iterativa
    15. 15. Abordagem Recursiva x Iterativa Recursão – Estrutura de Seleção; – Usa repetição atraves de chamdas de Função; – Teste de término: caso base encontrado; – Produz versão mais simples do problema a cada chamada; – pode ocorrer infinitamente; Iteração • Estrutura de Repetição; • Usa repetição atraves de estrutura de controle do laço; • Fim do loop; • Modifica o contador do loop; • Pode ocorrer infinitamente; • É mais utilizada, na maioria das vezes mais concisa e mais rápida;
    16. 16. Revisão • Do que é composta uma solução recursiva? unsigned long fatorial( unsigned long ); int main() { // Calculo do Fatorial de 0 até 10 for ( int cont = 0; cont <= 10; ++cont ) printf("%i! =t %i n", cont, fatorial(cont)); } // end main unsigned long fatorial( unsigned long num ) { if ( num <= 1 ) // teste para o caso base return 1; else return num * fatorial( num - 1 ); } // fim da função fatorial Qual o passo da recursão? Qual o caso base?
    17. 17. Torre de Hanoi • A descrição do trabalho em grupo está disponibilizado no ambiente de aprendizagem. • A avaliação será composta com as demais avaliações. • Será avaliada a correção da solução
    18. 18. Próxima Aula • Registros (Estruturas em C) – Coleções de Variáveis referenciadas por um nome – Definição; – Implementação e Uso; – Utilizando com Matrizes;
    19. 19. Bibliografia • GRIFFITHS, DAVID; GRIFFITHS, DAWN; Use a cabeça! C. Editora Alta Books, 2012. ISBN: 978-85-7608-794-6. • FEOFILOFF, PAULO. Algoritmos em Linguagem C. Editora Campus/Elsevier. 2008-2009. ISBN: 978-85-352-3249-3. • Deitel, Harvey; Paul Deitel; C - Como Programar. 6ª Edição. Editora Pearson,2011.

    ×