피보나치 수열

2025. 2. 4. 11:22·내배캠/C++

📌 피보나치 수열(Fibonacci Sequence)

피보나치 수열은 수학에서 매우 유명한 수열로, 간단하면서도 다양한 분야에서 응용되는 특징을 가진다.

 

 

 

📍 피보나치 수열의 정의

피보나치 수열은 다음과 같은 규칙으로 정의된다:

  • 첫 번째 항은 0, 두 번째 항은 1로 시작한다.
  • 이후의 항은 바로 앞의 두 항을 더한 값이다.

수열의 일반식:

  • F(0)=0F(0) = 0F(0)=0
  • F(1)=1F(1) = 1F(1)=1
  • F(n)=F(n−1)+F(n−2)F(n) = F(n-1) + F(n-2)F(n)=F(n−1)+F(n−2) (단, n≥2n \geq 2n≥2)

예시로 본 피보나치 수열:
0,1,1,2,3,5,8,13,21,34,55,…0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55…

 

 

📍 피보나치 수열의 특징

  • 점차 빠르게 증가하는 수열로, 큰 값일수록 지수 함수적인 성장을 보인다.
  • 두 항의 비율이 점점 **황금비(1.618)**에 가까워진다.

 

📌 피보나치 수열의 구현 방법

피보나치 수열은 다양한 방식으로 구현할 수 있다. 대표적인 방법으로는 재귀적 구현과 반복문을 이용한 구현이 있다.

✅ 1. 재귀적 구현 (Recursive)

int Fibonacci(int n)
{
    if (n <= 1)
        return n;
    return Fibonacci(n - 1) + Fibonacci(n - 2);
}

🔴 단점

  • 재귀 방식은 계산량이 많아질 경우 중복 호출로 인해 성능이 매우 느려진다.

 

✅ 2. 반복문을 이용한 구현 (Iterative)

int Fibonacci(int n) 
{
    if (n <= 1)
        return n;

    int a = 0, b = 1, result = 0;
    for (int i = 2; i <= n; ++i) {
        result = a + b;
        a = b;
        b = result;
    }
    return result;
}

🟢 장점

  • 반복문 방식은 불필요한 중복 계산을 피하므로 큰 숫자에서도 더 효율적이다.

 

✅ 3. 동적 프로그래밍 (Dynamic Programming)

재귀 호출의 중복 계산 문제를 해결하기 위해 메모이제이션(Memoization) 기법을 활용한다.

int Fibonacci(int n, vector<int>& dp) 
{
    if (n <= 1)
        return n;
    if (dp[n] != -1)
        return dp[n];

    dp[n] = Fibonacci(n - 1, memo) + Fibonacci(n - 2, memo);
    return dp[n];
}

🟢 장점

  • 동적 프로그래밍을 사용하면 큰 입력값에 대해서도 시간 복잡도를 줄일 수 있다.

 

 

📌 정리

피보나치 수열은 단순한 규칙이지만 그 응용 범위는 매우 넓다. 게임 개발에서도 특정 시스템의 패턴이나 성장 설계에 적용할 수 있으며, 특히 동적 계획법과 같은 최적화 문제에서 자주 활용된다. 규모가 커질수록 효율적인 알고리즘(반복문 또는 동적 프로그래밍)을 사용하는 것이 중요하다.

'내배캠 > C++' 카테고리의 다른 글

순열 구하는 STL 함수 next_permutation(), prev_permutation()  (0) 2025.02.10
온라인 학습 관리 시스템 구현  (0) 2025.02.05
stringstream  (0) 2025.01.22
디자인 패턴(Factory Pattern)  (0) 2025.01.20
Greedy 알고리즘  (0) 2025.01.08
'내배캠/C++' 카테고리의 다른 글
  • 순열 구하는 STL 함수 next_permutation(), prev_permutation()
  • 온라인 학습 관리 시스템 구현
  • stringstream
  • 디자인 패턴(Factory Pattern)
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    피보나치 수열
    상단으로

    티스토리툴바