피보나치 수
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점수는 포기하는 거라고 봐야될 것이다.
 xxxxxxxxxxclass 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 | 
댓글