HOWTO · Java

Java의 재귀 피보나치 시퀀스

이 기사에서는 Java에서 재귀 적 피보나치 시퀀스를 생성하는 방법을 소개합니다.

피보나치 수열

0과 1에서 시작하는 마지막 두 숫자를 더하여 구성되는 시퀀스입니다. n 번째 요소를 찾으려면 (n-1) 및 (n-2) 항을 더하여 숫자를 찾습니다. 여기서 n은 0보다 커야합니다.

재귀

재귀는 동일한 최종 함수 또는 프로 시저가 종료 조건을 만날 때까지 여러 번 자신을 호출하는 프로세스입니다. 종료 조건을 지정하지 않으면 메서드는 무한 루프 상태로 들어갑니다.

Java의 재귀 피보나치 시퀀스

아래 주어진 코드에서main()메소드는 클래스에 정의 된 정적 함수getFibonacciNumberAt()를 호출합니다. 이 함수는 피보나치 수를 평가하고자하는 수를 정의하는 매개 변수를 취합니다. 함수에는 원하는 조건을 충족 할 때 0 또는 1을 반환하는 기본 검사가 있습니다. 그렇지 않으면 함수는 전달 된 매개 변수를 감소시켜 자신을 다시 호출합니다.

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);
  }
}

출력:

8

자세한 평가는 아래에서 볼 수 있습니다.

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;

위의 프로그램을 수정하여 원하는 수까지 시리즈를 인쇄 할 수 있습니다.

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);
  }
}

출력:

0 1 1 2 3 5 8 13 21 34 55
노트
더 큰 숫자를 계산하려면 Java에서BigInteger클래스를 사용할 수 있습니다. 재귀 프로세스는 더 많은 수의 경우 복잡합니다. 따라서 이러한 숫자에 대한 계산 시간도 더 길어집니다.