피보나치 수 (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 = 2 → 1 + 2 = 3 → 2 + 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;
}
num1과 num2를 더하면 result를 반복하게 작성했다.
하지만 num1과 num2 변수들의 값 변화가 없으면 무한히 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;
}
}
count == 1인 경우, 첫 번째 피보나치 수 1을 반환num1 = 0, num2 = 1을 초기값으로 설정count - 1번 반복하면서 피보나치 수 계산result = num1 + num2; → 현재 두 값을 더한 값을 result에 저장num1 = num2; → 다음 계산을 위해 num1을 num2로 변경num2 = result; → num2를 새로 계산한 result로 변경