본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 10870번: 피보나치 수 5 C언어

문제 출처: https://www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n>=2)가 된다. n=17일때 까지 피보나치 수를 써보면 다음과 같다. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 n이 주어졌을 때, n번째 피보나치 수를 구하는

www.acmicpc.net

1. 코드

#include <stdio.h>

int a = 0, b = 1, c = 1;

int F(int n)
{
    if(n > 1)
    {
        c = a + b;
        a = b;
        b = c;
        return F(n - 1);
    }
    else if(n == 0) return 0;
    else return c;
}

int main(void)
{
    int n;
    
    scanf("%d", &n);
    printf("%d \n", F(n));
    return 0;
}

2. 문제 해결 방식

문제는 간단했다. 재귀 함수로 문제를 해결하였는다. 그런데 우선 피보나치수열에 대해 알아보자.

피보나치 수열

그림을 보면 기본적인 형식을 a + b = c라고 할 때  a의 값은 기존의 b값이 되고 b값은 기존의 c값이 된다. 그렇다면 처음에 0 + 1 = 1만 설정되어 있다면 계속해서 진행이 가능하다는 것이다.

그렇다면 재귀 함수로 이런 방식으로 진행하게 한다면 문제는 쉽게 해결할 수 있을 것이다.

3. 느낀 점

처음 보고 어려워 보였지만 생각보다 간단한 문제여서 처음부터 너무 겁먹었던 것 같다. 두려워하지 않고 계속해서 도전해나가야겠다.