C#에서 메서드를 재귀적(recursive)으로 호출한다는 것은, 메서드 내부에서 자기 자신을 다시 호출하는 방식을 의미합니다. 이번 글에서는 가장 대표적인 재귀 예제인 팩토리얼(Factorial) 계산을 통해 재귀 함수 display()가 어떻게 동작하는지 단계별로 살펴보겠습니다.
종료 조건(Base Case) 설정
재귀 함수는 무한히 호출되지 않도록 반드시 종료 조건이 필요합니다. 이 예제에서는 값이 1이면 더 이상 재귀 호출을 하지 않고 1을 그대로 반환합니다. 팩토리얼의 정의상 1! = 1이기 때문입니다.
if (n == 1) return 1;
재귀 호출의 진행 과정
만약 5!의 값을 구하고 싶다면, 재귀 함수는 아래와 같은 순서로 반복해서 호출됩니다.
Iteration 1: 5 * display(5 - 1); Iteration 2: 4 * display(4 - 1); Iteration 3: 3 * display(3 - 1); Iteration 4: 2 * display(2 - 1);
각 단계마다 n 값이 하나씩 줄어들며, n이 1에 도달하면 재귀 호출이 멈추고 지금까지의 결과값들이 거꾸로 곱해지면서 최종 결과가 반환됩니다.
전체 예제 코드
다음은 C# 메서드를 재귀적으로 호출하는 완전한 코드입니다.
예제
using System;
namespace MyApplication {
class Factorial {
public int display(int n) {
if (n == 1)
return 1;
else
return n * display(n - 1);
}
static void Main(string[] args) {
int value = 5;
int ret;
Factorial fact = new Factorial();
ret = fact.display(value);
Console.WriteLine("Value is : {0}", ret);
Console.ReadLine();
}
}
}실행 결과
Value is : 120
5! = 5 × 4 × 3 × 2 × 1 = 120이므로, 위 코드는 팩토리얼 값을 정확하게 계산합니다. 이처럼 재귀 호출은 반복문 없이도 문제를 간결하고 직관적으로 해결할 수 있는 강력한 기법입니다.