이번 글에서는 숫자로 이루어진 배열을 입력받아, 각 요소에 해당하는 팩토리얼(계승) 값을 담은 새로운 배열을 반환하는 JavaScript 함수를 작성해 보겠습니다.
구현 방식은 다음과 같습니다. 먼저 하나의 숫자를 받아 그 팩토리얼을 반환하는 재귀(recursive) 함수를 작성하고, 이후 map() 메서드를 사용해 배열의 각 요소를 순회하면서 팩토리얼을 계산한 뒤, 최종적으로 팩토리얼 값들로 구성된 새로운 배열을 반환합니다.
코드 예제
const arr = [4, 8, 2, 7, 6, 20, 11, 17, 12, 9];
// 재귀 방식으로 팩토리얼을 계산하는 함수
const factorial = (num, fact = 1) => {
if(num){
return factorial(num-1, fact*num);
};
return fact;
};
// map()으로 각 요소의 팩토리얼을 구해 새 배열 생성
const factorialArray = arr => arr.map(element => factorial(element));
console.log(factorialArray(arr));위 코드에서 factorial 함수는 기본 매개변수(default parameter)인 fact = 1을 활용합니다. 숫자가 0이 될 때까지 자기 자신을 재귀 호출하면서 곱셈 결과를 누적하고, 0이 되면 누적된 값을 반환하는 방식입니다.
실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[
24,
40320,
2,
5040,
720,
2432902008176640000,
39916800,
355687428096000,
479001600,
362880
]예를 들어 첫 번째 요소 4의 팩토리얼은 4 × 3 × 2 × 1 = 24이고, 두 번째 요소 8의 팩토리얼은 40320입니다. 이처럼 원본 배열의 각 위치에 대응하는 팩토리얼 값들이 순서대로 새 배열에 담겨 반환됩니다.