피보나치 수
x피보나치 수는 F(0) = 0, F(1) = 1일 때, 2 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 점화식입니다. 2 이상의 n이 입력되었을 때, fibonacci 함수를 제작하여 n번째 피보나치 수를 반환해 주세요. 예를 들어 n = 3이라면 2를 반환해주면 됩니다.
피보나치 수는 0과 1로 시작해서 그 뒤부터는 앞의 두 숫자를 더해주면 되는데, 문제에서 이미 식을 다 내줘버려서 설명할 것도 없는 문제이다.
그런데 여기서 만약 위의 문제에 주어진대로 재귀함수를 호출하는 식으로 만들면 num에 큰 숫자를 넣었을 때 런타임이 너무 길어지는 문제가 생길 수 있다.
재귀함수라는 게 재밌고 만들기 편하지만 알고리즘 문제를 풀 때는 안좋은 방법인 것 같다. 특히 코딜리티의 문제들처럼 시간복잡도 제한이 주어지는 문제에서 사용해서는 performance점수는 포기하는 거라고 봐야될 것이다.
xxxxxxxxxx
class Fibonacci {
public long fibonacci(int num) {
long[] arr = new long[num + 1];
for (int i = 0; i < 2; i++)
arr[i] = i;
for (int i = 2; i <= num; i++)
arr[i] = arr[i - 1] + arr[i - 2];
return arr[num];
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
Fibonacci c = new Fibonacci();
int testCase = 3;
System.out.println(c.fibonacci(testCase));
}
}
'공부 > algorithm' 카테고리의 다른 글
[programmers] 약수의 합 (0) | 2018.05.21 |
---|---|
[programmers] 스트링을 숫자로 바꾸기 (0) | 2018.05.21 |
[programmers] 짝수와 홀수 (0) | 2018.05.21 |
[programmers] 최대공약수와 최소공배수 (0) | 2018.05.21 |
[programmers] 수박수박수박수박수박수? (0) | 2018.05.21 |
댓글