SlideShare uma empresa Scribd logo
1 de 14
Recursividade

 Prof. Adriano Teixeira de Souza
   Um objeto é dito recursivo se pode ser
    definido em termos de si próprio.


      “Para fazer iogurte, você precisa de
        leite e de um pouco de iogurte.”


       “Para entender recursividade, você
           primeiro tem de entender
                 recursividade.”


                        Prof. Adriano Teixeira de Souza
   A recursão é uma forma interessante de resolver
    problemas, pois o divide em problemas menores
    de mesma natureza.

   Um processo recursivo consiste de duas partes:
    ◦ O caso trivial, cuja solução é conhecida.
    ◦ Um método geral que reduz o problema a um ou mais
      problemas menores de mesma natureza.




                             Prof. Adriano Teixeira de Souza
   Um programa recursivo é um programa que chama
    a si mesmo, direta ou indiretamente.

   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


                               Prof. Adriano Teixeira de Souza
   Cada vez que uma função é chamada de forma
    recursiva, é alojado e guardado uma cópia dos
    seus parâmetros por forma a não perder os valores
    dos parâmetros das chamadas anteriores.

   Em cada instância da função, só são diretamente
    acessíveis os parâmetros criados para esta
    instância, não sendo directamente acessíveis os
    parâmetros de outras instâncias.




                           Prof. Adriano Teixeira de Souza
   As funções recursivas contêm duas partes
    fundamentais:

    ◦ Ponto de Parada: o ponto de parada da recursividade é
      resolvido sem utilização de recursividade, sendo este ponto
      geralmente um limite superior ou inferior da regra geral.

    ◦ Regra Geral: o método geral da recursividade reduz a
      resolução do problema através da invocação recursiva de casos
      mais pequenos, sendo estes casos mais pequenos resolvidos
      através da resolução de casos ainda mais pequenos, e assim
      sucessivamente, até atingir o ponto de parada que finaliza o
      método.



                                 Prof. Adriano Teixeira de Souza
   Cálculo do fatorial:


                   1,                        se n = 1
       fat(n) =
                   n * fat(n-1),             se n > 1




                           Prof. Adriano Teixeira de Souza
   Recursividade é a propriedade que uma função
    tem de chamar a si própria, diretamente ou não.
    Isto é usado para simplificar um problema. É um
    caso particular de aninhamento.
Exemplo mais comum de recursão: função Fatorial

                         Caso base
    0!=1
    1!=1.0!=1                            Regra Geral:
    2!=2.1!=2.1                         n ! = n * (n-1) !
    3!=3.2!=3.2.1                    fat(n) = n * fat(n-1)
    4!=4.3!=4.3.2.1
Ex: Fatorial de 4
  n = 4! = 4 . 3!                               Caso base
               3! = 3 . 2!
                        2! = 2 . 1!
                                 1! = 1 . 0!
                                          0! = 1
                                 1! = 1 . 1
                        2! = 2 . 1
               3! = 3 . 2
      4! = 4 . 6
  n = 24
   Como fica o Fatorial de 5?




                         Prof. Adriano Teixeira de Souza
   Como uma função recursiva pode chamar a si
    mesma indefinidamente, é essencial a existência
    do caso base, ou condição de parada. No caso do
    fatorial, o caso base é o zero, cujo valor do
    fatorial é 1. A partir dele, são encontrados todos
    os outros valores.

int fatorial(int n) {
  if (n == 0)    // caso base, onde a recursão    acaba
    return 1;
  else          // caso indutivo
    return ( n * fatorial( n-1 ) );
}
   1) Exponenciação. Escreva uma função recursiva
    eficiente que receba inteiros positivos k e n e
    calcule k n. (Suponha que kn cabe em um int.)
    Quantas multiplicações sua função executa
    aproximadamente?


   2) Qual o valor de X (4)?
        int X (int n) {
               if (n == 1 || n == 2) return n;
               else return X (n-1) + n * X (n-2);
        }


                            Prof. Adriano Teixeira de Souza
   3) A sequência de Fibonacci é dada pela
    seguinte fórmula:




   Apresente uma solução por meio de função
    recursiva que calcule e imprima os números
    da sequência até o i-ésimo termo.




                        Prof. Adriano Teixeira de Souza
   3) Implemente uma função recursiva soma(n)
    que calcula o somatório dos n primeiros
    números inteiros.




                       Prof. Adriano Teixeira de Souza

Mais conteúdo relacionado

Mais procurados

Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Leinylson Fontinele
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Rafael Ponte
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Object oriented approach in python programming
Object oriented approach in python programmingObject oriented approach in python programming
Object oriented approach in python programmingSrinivas Narasegouda
 
Sistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPCSistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPCAdriano Teixeira de Souza
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoLeinylson Fontinele
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem Cprofjr
 
08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_erWalter Alves Pereira
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 

Mais procurados (20)

6 estruturas de dados heterogêneas
6  estruturas de dados heterogêneas6  estruturas de dados heterogêneas
6 estruturas de dados heterogêneas
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)Estrutura de Dados Apoio (Tabela Hash)
Estrutura de Dados Apoio (Tabela Hash)
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016Como Apresentar Codigo em Slides - Javou #7 - 2016
Como Apresentar Codigo em Slides - Javou #7 - 2016
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Object oriented approach in python programming
Object oriented approach in python programmingObject oriented approach in python programming
Object oriented approach in python programming
 
Sistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPCSistemas Distribuídos - Comunicação Distribuída – RPC
Sistemas Distribuídos - Comunicação Distribuída – RPC
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Aula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem CAula sobre matrizes - Linguagem C
Aula sobre matrizes - Linguagem C
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er08 modelo conceitual_fisico_logico_er
08 modelo conceitual_fisico_logico_er
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Aula 06 - Diagrama de classes
Aula 06 - Diagrama de classesAula 06 - Diagrama de classes
Aula 06 - Diagrama de classes
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 

Destaque

Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeRegis Magalhães
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivasRicardo Bolanho
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividadeAnielli Lemes
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Adriano Teixeira de Souza
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Adriano Teixeira de Souza
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em CCaique Silva
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Adriano Teixeira de Souza
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Adriano Teixeira de Souza
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Adriano Teixeira de Souza
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadasrenatopaschoal
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando pythonJean Lopes
 

Destaque (20)

Recursividade
RecursividadeRecursividade
Recursividade
 
Logica Algoritmo 08 Recursividade
Logica Algoritmo 08 RecursividadeLogica Algoritmo 08 Recursividade
Logica Algoritmo 08 Recursividade
 
12 algoritmos e funcoes recursivas
12   algoritmos e funcoes recursivas12   algoritmos e funcoes recursivas
12 algoritmos e funcoes recursivas
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Lista funcões e recursividade
Lista funcões e recursividadeLista funcões e recursividade
Lista funcões e recursividade
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
 
Recursividade em C
Recursividade em CRecursividade em C
Recursividade em C
 
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
 
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)Estrutura de Dados em Java (Revisão de Algoritimos em Java)
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
 
Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)Estrutura de Dados em Java (Introdução)
Estrutura de Dados em Java (Introdução)
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória Estrutura de dados em Java - Ponteiros e Alocação de Memória
Estrutura de dados em Java - Ponteiros e Alocação de Memória
 
Aula1
Aula1Aula1
Aula1
 
Árvores binárias balanceadas
Árvores binárias balanceadasÁrvores binárias balanceadas
Árvores binárias balanceadas
 
Cientista da computacao usando python
Cientista da computacao usando pythonCientista da computacao usando python
Cientista da computacao usando python
 

Semelhante a Recursividade: Entendendo a recursão

Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividadeMauricio Wieler
 
Aula 2 profmat - Aplicacoes da Inducao
Aula 2   profmat - Aplicacoes da InducaoAula 2   profmat - Aplicacoes da Inducao
Aula 2 profmat - Aplicacoes da InducaoAline Guedes
 
Aula 2 PROFMAT Aplicacoes da Inducao
Aula 2   PROFMAT Aplicacoes da InducaoAula 2   PROFMAT Aplicacoes da Inducao
Aula 2 PROFMAT Aplicacoes da InducaoAline Guedes
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrênciaPablo Silva
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_javaMirlem Pereira
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmosPablo Silva
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2Rogerio Oliveira
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsortFlávio Freitas
 

Semelhante a Recursividade: Entendendo a recursão (20)

Pesquisa e ordenação recursividade
Pesquisa e ordenação   recursividadePesquisa e ordenação   recursividade
Pesquisa e ordenação recursividade
 
Pged 07
Pged 07Pged 07
Pged 07
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Aula 2 profmat - Aplicacoes da Inducao
Aula 2   profmat - Aplicacoes da InducaoAula 2   profmat - Aplicacoes da Inducao
Aula 2 profmat - Aplicacoes da Inducao
 
Aula 2 PROFMAT Aplicacoes da Inducao
Aula 2   PROFMAT Aplicacoes da InducaoAula 2   PROFMAT Aplicacoes da Inducao
Aula 2 PROFMAT Aplicacoes da Inducao
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
AP5_2013_2.pptx
AP5_2013_2.pptxAP5_2013_2.pptx
AP5_2013_2.pptx
 
Noções de Recursao
Noções de RecursaoNoções de Recursao
Noções de Recursao
 
Recursão
RecursãoRecursão
Recursão
 
Relações de recorrência
Relações de recorrênciaRelações de recorrência
Relações de recorrência
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Análise da complexidade de algoritmos
Análise da complexidade de algoritmosAnálise da complexidade de algoritmos
Análise da complexidade de algoritmos
 
Algoritmo recursivo
Algoritmo recursivoAlgoritmo recursivo
Algoritmo recursivo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Apresentação recursividade rev2
Apresentação recursividade rev2Apresentação recursividade rev2
Apresentação recursividade rev2
 
Aula1
Aula1Aula1
Aula1
 
Algoritmos - capítulo 6
Algoritmos - capítulo 6Algoritmos - capítulo 6
Algoritmos - capítulo 6
 
Aula 3
Aula 3Aula 3
Aula 3
 
Tutorial aed iii 007 - algoritmo de ordenação heapsort
Tutorial aed iii   007 - algoritmo de ordenação heapsortTutorial aed iii   007 - algoritmo de ordenação heapsort
Tutorial aed iii 007 - algoritmo de ordenação heapsort
 

Mais de Adriano Teixeira de Souza

Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSAdriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaAdriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Adriano Teixeira de Souza
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoAdriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Adriano Teixeira de Souza
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesAdriano Teixeira de Souza
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CAdriano Teixeira de Souza
 

Mais de Adriano Teixeira de Souza (17)

Responsive web design
Responsive web designResponsive web design
Responsive web design
 
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMSSistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
Sistemas Distribuídos - Comunicacao Distribuida - Middleware - JMS
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em JavaParadigmas de Linguagens de Programação - Gerenciamento de Memória em Java
Paradigmas de Linguagens de Programação - Gerenciamento de Memória em Java
 
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
Ferramentas para desenvolvimento web com produtividade - Artigo Final - Pos-G...
 
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)Ferramentas para desenvolvimento web com produtividade -  Slide Artigo (2009)
Ferramentas para desenvolvimento web com produtividade - Slide Artigo (2009)
 
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
Paradigmas de Linguagens de Programação - Biblioteca de Classes e Frameworks
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Paradigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de ExceçõesParadigmas de Linguagens de Programação - Tratamento de Exceções
Paradigmas de Linguagens de Programação - Tratamento de Exceções
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de AtribuiçãoParadigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
Paradigmas de Linguagens de Programação - Expressões e Instruções de Atribuição
 
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostosParadigmas de Linguagens de Programação - Tipos primitivos e compostos
Paradigmas de Linguagens de Programação - Tipos primitivos e compostos
 
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de DadosParadigmas de Linguagens de Programação - Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação - Tipos Abstratos de Dados
 
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmicoParadigmas de Linguagens de Programação - Escopo estático/dinâmico
Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
 
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
Paradigmas de Linguagens de Programação - Quatro Paradigmas + Ambientes de Pr...
 
Paradigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - ClassificaçõesParadigmas de Linguagens de Programação - Classificações
Paradigmas de Linguagens de Programação - Classificações
 
Estrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem CEstrutura de dados - Introdução a linguagem C
Estrutura de dados - Introdução a linguagem C
 

Recursividade: Entendendo a recursão

  • 1. Recursividade Prof. Adriano Teixeira de Souza
  • 2. Um objeto é dito recursivo se pode ser definido em termos de si próprio. “Para fazer iogurte, você precisa de leite e de um pouco de iogurte.” “Para entender recursividade, você primeiro tem de entender recursividade.” Prof. Adriano Teixeira de Souza
  • 3. A recursão é uma forma interessante de resolver problemas, pois o divide em problemas menores de mesma natureza.  Um processo recursivo consiste de duas partes: ◦ O caso trivial, cuja solução é conhecida. ◦ Um método geral que reduz o problema a um ou mais problemas menores de mesma natureza. Prof. Adriano Teixeira de Souza
  • 4. Um programa recursivo é um programa que chama a si mesmo, direta ou indiretamente.  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 Prof. Adriano Teixeira de Souza
  • 5. Cada vez que uma função é chamada de forma recursiva, é alojado e guardado uma cópia dos seus parâmetros por forma a não perder os valores dos parâmetros das chamadas anteriores.  Em cada instância da função, só são diretamente acessíveis os parâmetros criados para esta instância, não sendo directamente acessíveis os parâmetros de outras instâncias. Prof. Adriano Teixeira de Souza
  • 6. As funções recursivas contêm duas partes fundamentais: ◦ Ponto de Parada: o ponto de parada da recursividade é resolvido sem utilização de recursividade, sendo este ponto geralmente um limite superior ou inferior da regra geral. ◦ Regra Geral: o método geral da recursividade reduz a resolução do problema através da invocação recursiva de casos mais pequenos, sendo estes casos mais pequenos resolvidos através da resolução de casos ainda mais pequenos, e assim sucessivamente, até atingir o ponto de parada que finaliza o método. Prof. Adriano Teixeira de Souza
  • 7. Cálculo do fatorial: 1, se n = 1 fat(n) = n * fat(n-1), se n > 1 Prof. Adriano Teixeira de Souza
  • 8. Recursividade é a propriedade que uma função tem de chamar a si própria, diretamente ou não. Isto é usado para simplificar um problema. É um caso particular de aninhamento. Exemplo mais comum de recursão: função Fatorial Caso base 0!=1 1!=1.0!=1 Regra Geral: 2!=2.1!=2.1 n ! = n * (n-1) ! 3!=3.2!=3.2.1 fat(n) = n * fat(n-1) 4!=4.3!=4.3.2.1
  • 9. Ex: Fatorial de 4 n = 4! = 4 . 3! Caso base 3! = 3 . 2! 2! = 2 . 1! 1! = 1 . 0! 0! = 1 1! = 1 . 1 2! = 2 . 1 3! = 3 . 2 4! = 4 . 6 n = 24
  • 10. Como fica o Fatorial de 5? Prof. Adriano Teixeira de Souza
  • 11. Como uma função recursiva pode chamar a si mesma indefinidamente, é essencial a existência do caso base, ou condição de parada. No caso do fatorial, o caso base é o zero, cujo valor do fatorial é 1. A partir dele, são encontrados todos os outros valores. int fatorial(int n) { if (n == 0) // caso base, onde a recursão acaba return 1; else // caso indutivo return ( n * fatorial( n-1 ) ); }
  • 12. 1) Exponenciação. Escreva uma função recursiva eficiente que receba inteiros positivos k e n e calcule k n. (Suponha que kn cabe em um int.) Quantas multiplicações sua função executa aproximadamente?  2) Qual o valor de X (4)? int X (int n) { if (n == 1 || n == 2) return n; else return X (n-1) + n * X (n-2); } Prof. Adriano Teixeira de Souza
  • 13. 3) A sequência de Fibonacci é dada pela seguinte fórmula:  Apresente uma solução por meio de função recursiva que calcule e imprima os números da sequência até o i-ésimo termo. Prof. Adriano Teixeira de Souza
  • 14. 3) Implemente uma função recursiva soma(n) que calcula o somatório dos n primeiros números inteiros. Prof. Adriano Teixeira de Souza