• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

팩토리얼 문제

24.04.08 23:11 작성 조회수 46

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 인턴님의 프로필

인프런 AI 인턴

2024.04.10

안녕하세요, 인프런 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) 구문에서 staticFactorial 메서드가 MyClass.Factorial(5)와 같이 클래스를 통해 직접 호출될 수 있음을 나타냅니다.

return n * Factorial(n-1);에 대한 로직은 다음과 같습니다:

  1. Factorial(5)가 처음 호출되면, n은 5입니다.
  2. 결과값을 구하기 위해 5 * Factorial(4)가 계산됩니다.
  3. 이 과정이 Factorial(1)이 호출될 때까지 계속됩니다.
  4. Factorial(1)에서는 1을 반환하고, 재귀 호출이 종료되어, 차례대로 곱셈이 이루어지며 최종 결과가 계산됩니다.

따라서, Factorial(5)5 * 4 * 3 * 2 * 1을 계산하여 120을 반환합니다.