Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 거듭제곱(m^n) 계산 함수 구현하기

이번 글에서는 두 개의 숫자 mn을 입력받아 m의 n제곱(m^n)을 계산해 반환하는 JavaScript 함수를 만들어 보겠습니다.

예를 들어, m = 4, n = 3일 때 결과는 다음과 같습니다.

power(4, 3) = 4^3 = 4 * 4 * 4 = 64
power(6, 3) = 216

JavaScript에는 기본적으로 Math.pow() 메서드가 존재하지만, 이번 예제에서는 재귀(Recursion)와 분할 정복 기법을 활용해 직접 거듭제곱 함수를 구현해 보겠습니다. 이 방식은 단순 반복 곱셈보다 연산 횟수가 적어 효율적입니다.

구현 코드

아래 코드는 재귀 호출을 사용하여 거듭제곱을 계산합니다. 지수가 짝수일 경우 절반으로 나누어 제곱하는 방식으로 연산량을 줄였습니다.

const power = (m, n) => {
    // 지수가 음수인 경우 양수 지수로 변환
    if(n < 0 && m !== 0){
       return power(1/m, n*-1);
   };
    // 지수가 0이면 항상 1 반환
    if(n === 0){
       return 1;
   }
    // 지수가 1이면 밑값 그대로 반환
    if(n === 1){
       return m;
   };
    // 지수가 짝수인 경우: 분할 정복으로 연산 최적화
    if (n % 2 === 0){
       const res = power(m, n / 2);
       return res * res;
   }else{
       // 지수가 홀수인 경우: 하나를 떼어내고 재귀 호출
       return power(m, n - 1) * m;
   };
};
console.log(power(4, 3));
console.log(power(6, 3));

코드 동작 원리

이 알고리즘의 핵심은 다음 세 가지 규칙입니다.

1. 음수 지수 처리: 지수 n이 음수이면 (1/m)^|n| 형태로 변환하여 동일한 로직을 재사용합니다.

2. 짝수 지수 최적화: m^8 = (m^4)² 처럼 지수를 절반으로 나눈 뒤 결과를 제곱하면, 곱셈 횟수를 O(n)에서 O(log n) 수준으로 크게 줄일 수 있습니다.

3. 홀수 지수 처리: 지수가 홀수라면 m^(n-1) × m으로 분해하여 짝수 지수 문제로 변환한 후 재귀적으로 해결합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.

64
216

이처럼 재귀와 분할 정복을 활용하면 Math.pow() 없이도 효율적인 거듭제곱 함수를 손쉽게 구현할 수 있습니다.