피보나치 수

Clean·2025년 3월 16일

피보나치 수

피보나치 수 (Fibonacci numbers)는 첫째 및 둘째 항이 1이며
그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다.
처음 여섯 항은 각각 1, 1, 2, 3, 5, 8이다.
wikipedia


함수로 피보나치 수 구하기

int n을 함수로 전달하여 콘솔창에 출력하기

// 처음과 두번째 수는 1
int num1 = 1;
int num2 = 1;

// num1 + num2 = num3
// num2 + num3 = num4
// num3 + num4 = num5

1 + 1 = 21 + 2 = 32 + 3 = 5

피보나치 수가 어떻게 증가하는지 보면,

2번째값결과값이 매 식마다 필요한걸 알 수 있다.


static int GetNumber(int count)
{
    if (count == 1)
        return 1;

    int num1 = 0;
    int num2 = 1;
    int result = 0;

    for (int i = 1; i < count; i++)
    {
        result = num1 + num2;
        num1 = num2;
        num2 = result;
    }
    return result;
}

num1num2를 더하면 result를 반복하게 작성했다.
하지만 num1num2 변수들의 값 변화가 없으면 무한히 1 = 0 + 1을 반복하기 때문에

// num1 + num2 = num3
// num2 + num3 = num4
// num3 + num4 = num5

위에 식처럼 되게끔 num2 값을 다시 num1에 넣어주고, result값을 다시 num2에 넣어줬다.

그럼 for문을 통해 반복할 때 마다, 새로운 값으로 연산을 하고

반복 후에는 (n-2) + (n-1)번째 값을 반환한다.


전체 코드

// 전체 코드
class Program
{
    static void Main(string[] args)
    {
        Console.Write("피보나치 수 n번째 값 찾기\n몇번째 값을 찾을지 숫자를 입력해주세요 : ");
        while (true)
        {
            if (int.TryParse(Console.ReadLine(), out int index) && index >= 0)
            {
                int result = GetNumber(index);
                Console.WriteLine($"{index}번째 값은 [{result}] 입니다.");
                break;
            }
            else
            {
                Console.Write("값을 다시 입력해주세요 : ");
            }
        }
    }

    static int GetNumber(int count)
    {
        if (count == 1)
            return 1;

        int num1 = 0;
        int num2 = 1;
        int result = 0;

        for (int i = 1; i < count; i++)
        {
            result = num1 + num2;
            num1 = num2;
            num2 = result;
        }
        return result;
    }
}

  1. count == 1인 경우, 첫 번째 피보나치 수 1을 반환
  2. num1 = 0, num2 = 1을 초기값으로 설정
  3. for문을 이용해 count - 1번 반복하면서 피보나치 수 계산
  • result = num1 + num2; → 현재 두 값을 더한 값을 result에 저장
  • num1 = num2; → 다음 계산을 위해 num1을 num2로 변경
  • num2 = result; → num2를 새로 계산한 result로 변경
  1. 반복이 끝난 후 result 값을 반환

0개의 댓글