Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 재귀(Recursion)를 활용해 숫자의 거듭제곱을 계산하는 방법

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 메서드 사용을 검토하는 것이 좋습니다.