인프런 커뮤니티 질문&답변
팩토리얼 문제
작성
·
247
0
static int Factorial (int n)
{
return n * Factorial(n-1);
}
static void Main(string [] args)
{
int ret = Factorial(5);
Console.WriteLine(ret);
}
Factorial(5)가 int ret으로 할당되었고, Factorial(n)이므로 n이 5로 삽입되었다는걸까요?
static int Factorial 구문에서 반환값이
return n * Factorial(n-1); 이렇게 표기되어 있어서 n-1 이므로 Factorial(5)가 나오기 위해서는 n에 6이 할당되어야 하는게 아닌가요?
각각 static 구문의 의미랑 로직이 어렵네요
핳 모르겠습니다 도와주세영 .. 🥲
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
여기에 나와 있는 코드는 팩토리얼 함수를 재귀적으로 구현한 것입니다. 팩토리얼 함수 Factorial(n)은 n이 1 이하가 될 때까지 계속해서 n과 Factorial(n-1)의 곱을 반환합니다.
즉, Factorial(5)는 처음에 5로 시작하여 5 * Factorial(4), 4 * Factorial(3), 3 * Factorial(2), 2 * Factorial(1)의 순서로 계산되며, Factorial(1)이 반환되는 시점에서 재귀 호출은 종료됩니다. 따라서 n에 6이 할당될 필요는 없습니다. 처음 호출될 때 n의 값이 5이고, 이후 재귀 호출을 통해 값이 감소합니다.
static 키워드는 해당 메서드나 변수가 인스턴스 없이 클래스 이름으로 직접 호출될 수 있음을 의미합니다. static int Factorial(int n) 구문에서 static은 Factorial 메서드가 MyClass.Factorial(5)와 같이 클래스를 통해 직접 호출될 수 있음을 나타냅니다.
return n * Factorial(n-1);에 대한 로직은 다음과 같습니다:
Factorial(5)가 처음 호출되면, n은 5입니다.
- 결과값을 구하기 위해
5 * Factorial(4)가 계산됩니다.
- 이 과정이
Factorial(1)이 호출될 때까지 계속됩니다.
Factorial(1)에서는 1을 반환하고, 재귀 호출이 종료되어, 차례대로 곱셈이 이루어지며 최종 결과가 계산됩니다.
따라서, Factorial(5)는 5 * 4 * 3 * 2 * 1을 계산하여 120을 반환합니다.





