HOWTO · Java

Sequência de Fibonacci recursiva em Java

Este artigo apresenta métodos para criar uma sequência Fibonacci recursiva em Java.

Nesta página

Sequência de Fibonacci

Uma sequência que é formada pela adição dos dois últimos números começando em 0 e 1. Se alguém quiser encontrar o enésimo elemento, então o número é encontrado pela adição dos termos (n-1) e (n-2), onde n deve ser maior que 0.

Recursão

Recursão é o processo em que a mesma função ou procedimento definitivo chama a si mesmo várias vezes até encontrar uma condição de término. Se não especificarmos uma condição de término, o método entrará em um estado de loop infinito.

Sequência de Fibonacci recursiva em Java

No código fornecido a seguir, o método main() chama uma função estática getFibonacciNumberAt() definida na classe. A função recebe um parâmetro que define um número, onde queremos avaliar o número de Fibonacci. A função tem uma verificação primária que retornará 0 ou 1 quando atender à condição desejada. Caso contrário, a função se chamará novamente diminuindo o parâmetro passado a ela.

package recursiveFibonacci;

public class RecursiveFibonacciSequence {
  public static void main(String[] args) {
    int fibonacciNumber = getFibonacciNumberAt(6);
    System.out.println(fibonacciNumber);
  }

  public static int getFibonacciNumberAt(int n) {
    if (n == 0)
      return 0;
    else if (n == 1)
      return 1;
    else
      return getFibonacciNumberAt(n - 1) + getFibonacciNumberAt(n - 2);
  }
}

Resultado:

8

A avaliação detalhada pode ser vista abaixo:

getFibonacciNumberAt(6) = getFibonacciNumberAt(5) + getFibonacciNumberAt(4); //5+3=8
getFibonacciNumberAt(5) = getFibonacciNumberAt(4) + getFibonacciNumberAt(3); //3+2=5
getFibonacciNumberAt(4) = getFibonacciNumberAt(3) + getFibonacciNumberAt(2); //2+1=3
getFibonacciNumberAt(3) = getFibonacciNumberAt(2) + getFibonacciNumberAt(1); //1+1=2
getFibonacciNumberAt(2) = getFibonacciNumberAt(1) + getFibonacciNumberAt(0); //1+0=1
If, getFibonacciNumberAt(1) = 1;
And getFibonacciNumberAt(0) = 0;

Podemos modificar o programa acima para imprimir uma série até o número desejado.

package recursiveFibonacci;

public class RecursiveFibonacci {
  public static void main(String[] args) {
    int maxCount = 10;
    for (int i = 0; i <= maxCount; i++) {
      int fibonacciNumber = printFibonacci(i);
      System.out.print(" " + fibonacciNumber);
    }
  }

  public static int printFibonacci(int n) {
    if (n == 0)
      return 0;
    else if (n == 1)
      return 1;
    else
      return printFibonacci(n - 1) + printFibonacci(n - 2);
  }
}

Resultado:

0 1 1 2 3 5 8 13 21 34 55
Nota
Para o cálculo de números maiores, podemos usar a classe BigInteger em Java. O processo de recursão será complexo para números maiores; portanto, o tempo de cálculo para esses números também será maior.