개요
이번 튜토리얼에서는 별도의 헬퍼(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