팩토리얼(Factorial, 계승)은 어떤 수부터 1까지의 모든 정수를 곱한 값으로, n! 형태로 표기합니다. 이 글에서는 C#에서 재귀 함수를 사용해 팩토리얼을 계산하는 방법을 단계별로 살펴보겠습니다.
재귀의 기본 원리
재귀란 함수가 자기 자신을 다시 호출하는 프로그래밍 기법입니다. 아래 예제에서는 checkFact()라는 재귀 함수를 통해 팩토리얼 값을 구합니다.
먼저 입력값이 1이면 팩토리얼 값도 1이므로 그대로 1을 반환하며 재귀 호출을 종료합니다. 이것이 재귀 함수의 종료 조건(base case)입니다.
if (n == 1)
return 1;입력값이 1이 아니라면, 자기 자신을 다시 호출하면서 문제를 점점 작은 단위로 줄여 나갑니다. 예를 들어 5!를 구하는 과정은 다음과 같이 진행됩니다.
Iteration 1: 5 * checkFact(5 - 1); Iteration 2: 4 * checkFact(4 - 1); Iteration 3: 3 * checkFact(3 - 1); Iteration 4: 2 * checkFact(2 - 1);
C# 전체 예제 코드
아래 코드를 실행하면 위에서 설명한 재귀 로직이 실제로 어떻게 동작하는지 확인할 수 있습니다.
using System;
namespace Demo {
class Factorial {
public int checkFact(int n) {
if (n == 1)
return 1;
else
return n * checkFact(n - 1);
}
static void Main(string[] args) {
int value = 9;
int ret;
Factorial fact = new Factorial();
ret = fact.checkFact(value);
Console.WriteLine("Value is : {0}", ret );
Console.ReadLine();
}
}
}실행 결과
9! 즉, 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1을 계산한 결과는 다음과 같습니다.
Value is : 362880
정리
재귀를 활용하면 팩토리얼처럼 반복적인 구조를 가진 문제를 간결하고 직관적인 코드로 해결할 수 있습니다. 다만 재귀 호출이 깊어지면 스택 오버플로우가 발생할 수 있으므로, 항상 명확한 종료 조건을 설정하는 것이 중요합니다.