C#에서 재귀(recursion)를 사용하면 반복문 없이도 숫자의 거듭제곱을 간결하게 계산할 수 있습니다. 재귀란 함수가 자기 자신을 다시 호출하는 프로그래밍 기법으로, 문제를 더 작은 단위로 나누어 해결할 때 유용하게 활용됩니다.
재귀의 핵심 원리
거듭제곱 계산에서 재귀의 핵심은 다음 조건문에 있습니다. 지수(p)가 0이 아니면, 함수가 자기 자신을 호출하며 지수를 하나씩 줄여가는 방식입니다.
if (p != 0) {
return (n * power(n, p - 1));
}
위 코드에서 n은 밑(base)이 되는 숫자이고, 매번 재귀 호출이 일어날 때마다 지수 p가 1씩 감소합니다. 이 과정은 p가 0이 될 때까지 반복되며, p == 0이 되면 재귀가 종료되고 1을 반환하면서 결과가 역순으로 곱해집니다.
전체 예제 코드
다음은 5의 2제곱을 재귀 함수로 계산하는 완전한 C# 예제입니다.
using System;
using System.IO;
public class Demo {
public static void Main(string[] args) {
int n = 5; // 밑(base)
int p = 2; // 지수(exponent)
long res;
res = power(n, p);
Console.WriteLine(res);
}
static long power(int n, int p) {
if (p != 0) {
return (n * power(n, p - 1));
}
return 1;
}
}
실행 결과
25
코드 동작 과정 살펴보기
power(5, 2)가 호출되면 다음과 같은 흐름으로 진행됩니다.
power(5, 2)→ 5 ×power(5, 1)power(5, 1)→ 5 ×power(5, 0)power(5, 0)→ 지수가 0이므로 1 반환 (종료 조건)- 최종 결과: 5 × 5 × 1 = 25
주의할 점
재귀 함수에는 반드시 종료 조건(base case)이 있어야 합니다. 위 예제에서는 p == 0일 때 1을 반환하는 부분이 종료 조건 역할을 하며, 이것이 없으면 함수가 무한히 자신을 호출해 StackOverflowException이 발생할 수 있습니다. 또한 음수 지수나 큰 수를 다룰 경우 오버플로우 가능성을 고려해 long 타입이나 Math.Pow 메서드 사용을 검토하는 것이 좋습니다.