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

PPT
Ficheiros em JAVA
PDF
Recursividade
PDF
Programação Orientada a Objetos
PPTX
Algoritmos de ordenação
PDF
Análise assintótica
PDF
Programação Orientada a objetos em Java
PDF
Java orientação a objetos (associacao, composicao, agregacao)
PDF
Revisão Sobre Programação Orientada a Objetos com Java
Ficheiros em JAVA
Recursividade
Programação Orientada a Objetos
Algoritmos de ordenação
Análise assintótica
Programação Orientada a objetos em Java
Java orientação a objetos (associacao, composicao, agregacao)
Revisão Sobre Programação Orientada a Objetos com Java

Mais procurados (20)

PPTX
Aula diagrama de classes
PDF
Estrutura de Dados - Registros
PDF
Java orientação a objetos (variaveis de instancia e metodos)
PDF
Aprendendo Kotlin na Prática
PDF
POO - 19 - Elementos Estáticos
PDF
Aula 1 - Introdução a POO
PPTX
JAVA - Orientação a Objetos
PPT
Linguagem de programação
PPTX
Estrutura de dados em Java - Ponteiros e Alocação de Memória
PDF
Paradigma lógico
PDF
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
PPTX
NoSQL, Base VS ACID e Teorema CAP
PPTX
Estrutura de Dados - Conceitos fundamentais
PDF
Banco de Dados I Aula 06 - Generalização e Especialização
PPTX
Estrutura de dados em Java - Filas com lista encadeada
PDF
3 - Modelo Entidade Relacionamento
PPTX
Estrutura de dados em Java - Árvores Binárias
PDF
Paradigmas de programação
PPTX
Desvendando a linguagem JavaScript
PPTX
Aula 03 - Estruturas de repetição
Aula diagrama de classes
Estrutura de Dados - Registros
Java orientação a objetos (variaveis de instancia e metodos)
Aprendendo Kotlin na Prática
POO - 19 - Elementos Estáticos
Aula 1 - Introdução a POO
JAVA - Orientação a Objetos
Linguagem de programação
Estrutura de dados em Java - Ponteiros e Alocação de Memória
Paradigma lógico
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
NoSQL, Base VS ACID e Teorema CAP
Estrutura de Dados - Conceitos fundamentais
Banco de Dados I Aula 06 - Generalização e Especialização
Estrutura de dados em Java - Filas com lista encadeada
3 - Modelo Entidade Relacionamento
Estrutura de dados em Java - Árvores Binárias
Paradigmas de programação
Desvendando a linguagem JavaScript
Aula 03 - Estruturas de repetição
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 (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 - Pilhas
PPTX
Estrutura de dados em Java - Filas
PDF
Estrutura de dados - Árvores Binárias
PPT
Aula1
PPTX
Árvores binárias balanceadas
PDF
Cientista da computacao usando python
PPTX
Orgãos do poder das províncias unidas
PDF
Apresentando Virtualização de computadores (vmware)
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 (Variáveis Compostas - Vetores e Matrizes)
Estrutura de Dados em Java (Introdução)
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - Filas
Estrutura de dados - Árvores Binárias
Aula1
Árvores binárias balanceadas
Cientista da computacao usando python
Orgãos do poder das províncias unidas
Apresentando Virtualização de computadores (vmware)
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 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
PDF
Tutorial aed iii 007 - algoritmo de ordenação heapsort
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 da complexidade de algoritmos
Algoritmo recursivo
Seção 2.1 - Cálculo Numérico para engenharia
Apresentação recursividade rev2
Algoritmos - capítulo 6
Tutorial aed iii 007 - algoritmo de ordenação heapsort

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 (19)

PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PDF
SEMINÁRIO DE IHC - A interface Homem-Máquina
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPT
Conceitos básicos de Redes Neurais Artificiais
PDF
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
ccursoammaiacursoammaiacursoammaia123456
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PPTX
Aula 7 - Listas em Python (Introdução à Ciencia da Computação)
PPT
Aula de Engenharia de Software principais caracteristicas
PPTX
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
PDF
Banco de Dados 2atualização de Banco de d
PDF
Jira Software projetos completos com scrum
PDF
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
PDF
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
PDF
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
PDF
Metodologia Scrumban-XP - Um Guia Rápido (MrSomebody19).pdf
PDF
Processamento da remessa no SAP ERP, SCM610 Col15
Processos no SAP Extended Warehouse Management, EWM100 Col26
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
SEMINÁRIO DE IHC - A interface Homem-Máquina
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Conceitos básicos de Redes Neurais Artificiais
Aula 9 - Funções 202yttvrcrg5-1.pptx.pdf
Tipos de servidor em redes de computador.pptx
ccursoammaiacursoammaiacursoammaia123456
Analise Estatica de Compiladores para criar uma nova LP
Aula 7 - Listas em Python (Introdução à Ciencia da Computação)
Aula de Engenharia de Software principais caracteristicas
3b - Bradesco Lean Agile Training Plan - Ritos Operacionais (1).pptx
Banco de Dados 2atualização de Banco de d
Jira Software projetos completos com scrum
ASCENSÃO E QUEDA DO SOFTWARE LIVRE NO ESTADO BRASILEIRO
Visão geral da SAP, SAP01 Col18, Introdução sistema SAP,
Customizing básico em SAP Extended Warehouse Management, EWM110 Col26
Metodologia Scrumban-XP - Um Guia Rápido (MrSomebody19).pdf
Processamento da remessa no SAP ERP, SCM610 Col15

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