피보나치 수열의 재귀 및 비 재귀 솔루션

함수를 작성하고 n을 입력 한 다음 피보나치 수열의 n 번째 항을 찾습니다 (예 : F (N)).

피보나치 수열은 다음과 같이 정의됩니다 : F (0) = 0, F (1) = 1

F (N) = F (N-1) + F (N-2), 여기서 N> 1. 피보나치 수열은 0과 1에서 시작하고 다음 피보나치 수는 이전 두 수를 더한 것입니다.

답은 모듈로 1e9 + 7 (1000000007)이어야합니다. 계산의 초기 결과가 1000000008이면 1을 반환하십시오.

방법 1 : (재귀 적으로 이전에 계산 된 값을 반복적으로 계산하므로 불필요한 오버 헤드가 발생하므로 여기에 계산 된 값을 저장하도록 정의 된 맵이 있습니다. 그러나 메서드는 여전히 시간 초과됩니다!)

        public int fib(int n) {
   Map<Integer,Integer> m=new HashMap<>();
   if (n < 2)
         return n;

       if(!m.containsKey(n)){
          m.put(n,(fib(n-1)+fib(n-2))%1000000007);
      }
       return m.get(n);
}

방법 2 : 비 재귀

public int fib(int n) {
int constant=1000000007;
int fist=0;
int second=1;
int temp=0;
while(n-->0){
temp=(fist+second)%constant;
fist=second%constant;
second=temp%constant;
}
return fist;
}

 

 

추천

출처blog.csdn.net/qq_44624536/article/details/115190814