Mudanças entre as edições de "Pensamento Computacional - Tópicos Adicionais"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 44: Linha 44:
  
 
Observe que um método recursivo deve ser cuidadosamente planejado, pois em algum momento a chamada recursiva não é executada. Neste exemplo é o caso quando n=1 ou n=0. Até que você tenha experiência em programação, não recomenda-se o uso pois pode levar a efeitos indesejáveis. Lembre-se que chamadas recursivas acabam demandando mais memória da PILHA (STACK), pois variáveis locais são criadas a cada nova chamada do método.
 
Observe que um método recursivo deve ser cuidadosamente planejado, pois em algum momento a chamada recursiva não é executada. Neste exemplo é o caso quando n=1 ou n=0. Até que você tenha experiência em programação, não recomenda-se o uso pois pode levar a efeitos indesejáveis. Lembre-se que chamadas recursivas acabam demandando mais memória da PILHA (STACK), pois variáveis locais são criadas a cada nova chamada do método.
 +
 +
==Exercício 1=
 +
 +
Implementar usando recursividade um método java para somar uma sequÊncia de números naturais. O método recebe, por exemplo, 5 e o método deve retornar:
 +
  <math> 5 + 4 + 3 + 2 + 1 + 0 </math>
 +
OBS: A solução deste pŕoblema acaba sendo ineficiente pela elevada chamada de métodos...

Edição das 15h01min de 11 de dezembro de 2023

Conceito de Recursividade

Determinados problemas podem ser resolvidos de forma muito elegante e compacta usando o conceito de recursividade.

A recursividade acontece quando um método chama a ele mesmo resolvendo um determinado problema para um subconjunto de dados. Um bom exemplo de solução com recursividade é o problema de calcular o fatorial. Observe que o fatorial de 5, por exemplo, é:


  

Por sua vez, podemos reescrever da seguinte forma:

  
  
  
  
  

Observe se tivermos um método para o cálculo de fatorial de n, então ele pode se "autoinvocar" para calcular para n-1. Vamos a um exemplo:

public class FatorialRecursivo {

    public static void main(String[] args) {
        // Testando o método fatorial
        int numero = 5;
        long resultado = calcularFatorial(numero);
        System.out.println("O fatorial de " + numero + " é: " + resultado);
    }

    // Função recursiva para calcular o fatorial de um número
    public static long calcularFatorial(int n) {
        // Caso base: fatorial de 0 ou 1 é 1
        if (n == 0 || n == 1) {
            return 1;
        } else {
            // Chamada recursiva: fatorial(n) = n * fatorial(n-1)
            return n * calcularFatorial(n - 1);
        }
    }
}

Observe que um método recursivo deve ser cuidadosamente planejado, pois em algum momento a chamada recursiva não é executada. Neste exemplo é o caso quando n=1 ou n=0. Até que você tenha experiência em programação, não recomenda-se o uso pois pode levar a efeitos indesejáveis. Lembre-se que chamadas recursivas acabam demandando mais memória da PILHA (STACK), pois variáveis locais são criadas a cada nova chamada do método.

=Exercício 1

Implementar usando recursividade um método java para somar uma sequÊncia de números naturais. O método recebe, por exemplo, 5 e o método deve retornar:

  

OBS: A solução deste pŕoblema acaba sendo ineficiente pela elevada chamada de métodos...