프로그래밍에서는 이러한 수열을 배열 또는 리스트로 표현할 수 있다.
C/C++, Java -> 배열으로 구현
Python -> 리스트로 구현
public int Fibo(int x) {
if(x == 1 || x == 2) {
return 1;
}
return Fibo(x - 1) + Fibo(x - 2);
}
해당 소스코드는 f(n)함수의 n이 커질수록 수행 시간이 급격하게 늘어난다는 단점이 있다.
시간 복잡도 : O(2^N)
예를 들어 N=30일때, 약 10억 가량의 연산을 수행해야 한다.
static int n;
static int dp[];
static int Fibo(int x) {
if(x == 1 || x == 2) {
return 1;
}
if(dp[x] == 0) {
dp[x] = Fibo(x - 1) + Fibo(x - 2);
}
return dp[x];
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
dp = new int[n + 1];
System.out.println(Fibo(n));
}
! 가능하다면 탑다운 방식보다는 바텀업 방식을 권유