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

JavaScript에서 range()와 reduce()를 활용한 팩토리얼(계승) 함수 작성 방법


개요

이번 튜토리얼에서는 별도의 헬퍼(helper) 함수인 range()의 도움을 받아 JavaScript로 팩토리얼(계승) 함수를 작성하는 방법을 살펴보겠습니다.

range() 함수는 1부터 입력받은 숫자까지의 연속된 숫자들을 배열로 만들어 주는 역할을 합니다. 이후 메인 함수인 factorial()은 이 배열 위에서 Array.prototype.reduce() 메서드를 실행하여 배열의 모든 요소를 곱함으로써 팩토리얼 값을 계산합니다.

동작 원리

예를 들어 factorial(5)가 호출되면 다음과 같은 과정으로 진행됩니다.

  • range(1, 6)이 [1, 2, 3, 4, 5] 배열을 생성합니다.
  • reduce()는 초기값 1부터 시작하여 각 요소를 누적 곱셈합니다. 즉, 1 × 1 × 2 × 3 × 4 × 5 = 120이 됩니다.
  • Math.abs(n)를 사용하기 때문에 음수 입력도 처리할 수 있으며, n이 음수일 경우 최종 결과에 -1을 곱해 부호를 유지합니다.

예제 코드

전체 코드는 다음과 같습니다.

const range = (start, end) => {
    const acc = [];
    for (var i = start; i < end; i++) {
        acc.push(i);
    };
    return acc;
}
const factorial = n => {
    let factors = range(1, Math.abs(n)+1);
    let res = factors.reduce((acc,val) => {
        return acc * val;
    }, 1);
    if(n < 0){
        res *= -1;
    };
    return res;
};
console.log(factorial(5));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

120