SlideShare uma empresa Scribd logo
2
Mais lidos
8
Mais lidos
11
Mais lidos
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

PDF
Estrutura de Dados - Registros
PPTX
Estrutura de dados em Java - Árvores Binárias
PDF
07 diagrama de classes de análise
PDF
Aula 09 - introducao oo
PDF
Introdução à analise e complexidade de algoritmos
PPTX
Estrutura de dados em Java - Pilhas
PDF
Java orientação a objetos (variaveis de instancia e metodos)
PDF
Recursividade
Estrutura de Dados - Registros
Estrutura de dados em Java - Árvores Binárias
07 diagrama de classes de análise
Aula 09 - introducao oo
Introdução à analise e complexidade de algoritmos
Estrutura de dados em Java - Pilhas
Java orientação a objetos (variaveis de instancia e metodos)
Recursividade

Mais procurados (20)

PPTX
JAVA - Herança
PPTX
Introdução a poo
PPT
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
PDF
Python - Introdução
PPT
Normalização de Banco de Dados
PPT
Apresentando a Linguagem de Programação Python
PDF
Estrutura de dados - Pilhas
PDF
たのしい関数型
PPTX
Funções de duas variáveis reais e curvas de nível
PDF
Java orientação a objetos (associacao, composicao, agregacao)
PDF
POO - 10 - Herança
PPTX
Revisão UML
PDF
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
PPTX
Introdução a python
PPT
Aula 5 - Modelo de Entidade e Relacionamento - MER
PDF
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
PDF
Aula 07 - Diagrama de sequencia
DOCX
Exercícios - Herança - Java
PPTX
Diagrama sequencia
PDF
Curso de Java: Introdução a lambda e Streams
JAVA - Herança
Introdução a poo
Complexidade de Algoritmos, Notação assintótica, Algoritmos polinomiais e in...
Python - Introdução
Normalização de Banco de Dados
Apresentando a Linguagem de Programação Python
Estrutura de dados - Pilhas
たのしい関数型
Funções de duas variáveis reais e curvas de nível
Java orientação a objetos (associacao, composicao, agregacao)
POO - 10 - Herança
Revisão UML
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Introdução a python
Aula 5 - Modelo de Entidade e Relacionamento - MER
Pesquisa e Ordenação - Aula 12 - Pesquisa de Dados (Sequencial e Binária)
Aula 07 - Diagrama de sequencia
Exercícios - Herança - Java
Diagrama sequencia
Curso de Java: Introdução a lambda e Streams
Anúncio

Destaque (20)

PPT
Logica Algoritmo 08 Recursividade
PDF
12 algoritmos e funcoes recursivas
PPT
Recursividade
PDF
Lista funcões e recursividade
PPTX
Estrutura de Dados em Java (Funções e Procedimentos)
PDF
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
PPT
Recursividade em C
PPTX
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
PPTX
Estrutura de Dados em Java (Revisão de Algoritimos em Java)
PPTX
Estrutura de dados em Java - Filas com lista encadeada
PPTX
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
PPTX
Estrutura de Dados em Java (Introdução)
PPTX
Estrutura de dados em Java - Filas
PPTX
Estrutura de dados em Java - Filas
PDF
Estrutura de dados - Árvores Binárias
PPTX
Estrutura de dados em Java - Ponteiros e Alocação de Memória
PPT
Aula1
PPTX
Árvores binárias balanceadas
PDF
Cientista da computacao usando python
PPTX
Orgãos do poder das províncias unidas
Logica Algoritmo 08 Recursividade
12 algoritmos e funcoes recursivas
Recursividade
Lista funcões e recursividade
Estrutura de Dados em Java (Funções e Procedimentos)
Aplicação de Integração Contínua para viabilizar a rastreabilidade de artefat...
Recursividade em C
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 - Filas com lista encadeada
Estrutura de Dados em Java (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Introdução)
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
Estrutura de dados - Árvores Binárias
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Aula1
Árvores binárias balanceadas
Cientista da computacao usando python
Orgãos do poder das províncias unidas
Anúncio

Semelhante a Estrutura de dados em Java - Recursividade (20)

PPT
Pesquisa e ordenação recursividade
PDF
Pged 07
PPTX
Recursividade
PDF
Aula 2 profmat - Aplicacoes da Inducao
PDF
Aula 2 PROFMAT Aplicacoes da Inducao
PDF
Programando em python recursao
PPTX
AP5_2013_2.pptx
PDF
Noções de Recursao
PPTX
PDF
Relações de recorrência
PPTX
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
PDF
Análise assintótica
PDF
Análise da complexidade de algoritmos
PPTX
Algoritmo recursivo
PPTX
Seção 2.1 - Cálculo Numérico para engenharia
PDF
PPTX
Apresentação recursividade rev2
PDF
PDF
Algoritmos - capítulo 6
PPTX
Pesquisa e ordenação recursividade
Pged 07
Recursividade
Aula 2 profmat - Aplicacoes da Inducao
Aula 2 PROFMAT Aplicacoes da Inducao
Programando em python recursao
AP5_2013_2.pptx
Noções de Recursao
Relações de recorrência
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
Análise assintótica
Análise da complexidade de algoritmos
Algoritmo recursivo
Seção 2.1 - Cálculo Numérico para engenharia
Apresentação recursividade rev2
Algoritmos - capítulo 6

Mais de Adriano Teixeira de Souza (17)

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

Último (11)

PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Eng. Software - pontos essenciais para o início
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Design - Introdução a Gestalt e teoria das formas
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Utilizando code blockes por andre backes
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Eng. Software - pontos essenciais para o início
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Arquitetura de computadores - Memórias Secundárias
Design - Introdução a Gestalt e teoria das formas
Tipos de servidor em redes de computador.pptx
Utilizando code blockes por andre backes
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Manejo integrado de pragas na cultura do algodão
Viasol Energia Solar -Soluções para geração e economia de energia

Estrutura de dados em Java - Recursividade

  • 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