이번 글에서는 재귀(recursion) 방식을 활용해 숫자 n의 팩토리얼(계승)을 계산하는 자바스크립트 함수를 작성해 보겠습니다.
팩토리얼이란 양의 정수 n에 대해 1부터 n까지의 모든 정수를 곱한 값으로, 수식으로는 n! = n × (n-1) × (n-2) × ... × 1로 표현됩니다. 예를 들어 5!는 5 × 4 × 3 × 2 × 1 = 120입니다.
재귀 기반 팩토리얼 함수 만들기
재귀란 함수가 자기 자신을 다시 호출하는 프로그래밍 기법을 말합니다. 아래 코드에서는 사용자 정의 함수 recursiceFactorial()을 만들어 팩토리얼을 재귀적으로 계산합니다.
const num = 9;
const recursiceFactorial = (num, res = 1) => {
if(num){
return recursiceFactorial(num-1, res * num);
};
return res;
};코드 동작 원리
이 함수는 두 개의 매개변수를 받습니다. 첫 번째는 곱할 숫자 num, 두 번째는 누적 결과값 res이며 기본값은 1로 설정되어 있습니다.
num이 0이 아니면, 현재 값을res에 곱한 뒤num - 1로 자기 자신을 다시 호출합니다.num이 0이 되면 재귀 호출을 멈추고(base case), 지금까지 누적된res를 반환합니다.
즉, 9를 넣으면 9 × 8 × 7 × ... × 1이 차례대로 누적되어 최종 결과가 반환됩니다.
함수 호출 및 실행
이제 함수를 호출하면서 다양한 값을 전달해 결과를 확인해 보겠습니다.
const num = 9;
const recursiceFactorial = (num, res = 1) => {
if(num){
return recursiceFactorial(num-1, res * num);
};
return res;
};
console.log(recursiceFactorial(num));
console.log(recursiceFactorial(6));
console.log(recursiceFactorial(10));
console.log(recursiceFactorial(5));
console.log(recursiceFactorial(13));출력 결과
다음은 콘솔에 출력된 결과입니다.
362880 720 3628800 120 6227020800
각 입력값에 대한 팩토리얼이 정확하게 계산된 것을 확인할 수 있습니다. 참고로 자바스크립트의 Number 타입은 안전한 정수 범위가 제한되어 있으므로, 매우 큰 수의 팩토리얼을 다룰 때는 BigInt를 사용하는 것이 좋습니다.