반응형
자바스크립트를 배우는 초보 개발자라면 함수 개념을 익힐 때 꼭 한번 마주치는 예제가 바로 팩토리얼(factorial)입니다. 간단한 수학 개념이지만 자바스크립트 문법, 재귀 호출, 반복문 로직을 이해하는 데 아주 좋은 연습 소재입니다. 이 글에서는 팩토리얼이 무엇인지 개념부터 설명하고, 자바스크립트로 구현하는 방법을 재귀함수 방식과 반복문 방식으로 나누어 소개하겠습니다. 마지막에는 두 방식의 성능 차이와 입문자에게 유용한 실습 자료도 추천해드릴게요.
팩토리얼이란?
팩토리얼은 수학에서 n!로 표현하며, n × (n - 1) × (n - 2) × ... × 1의 곱을 의미합니다. 예를 들어:
- 5! = 5 × 4 × 3 × 2 × 1 = 120
- 0! = 1 (정의상 1로 간주)
수학적 정의는 간단하지만, 이를 코드로 구현하면서 함수 호출 흐름과 반복 구조를 연습할 수 있습니다.
자바스크립트 팩토리얼 구현 예제
1. 재귀함수로 구현 (Recursive)
function factorial(n) {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120
- factorial(5)는 5 × factorial(4) 식으로 함수가 자기 자신을 계속 호출합니다.
- 재귀 종료 조건(n === 0 || n === 1)이 없으면 무한 호출이 발생하므로 필수입니다.
2. 반복문으로 구현 (Iterative)
function factorialIter(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
console.log(factorialIter(5)); // 120
- 반복문은 로직이 직관적이고 메모리 사용이 안정적입니다.
- 큰 숫자를 다룰 때 스택 오버플로우를 피할 수 있습니다.
재귀함수 vs 반복문 성능 비교
구현 방식 | 장점 | 단점 |
재귀함수 | 코드가 간결하고 수학적 정의에 가까움 | 호출이 깊어지면 스택 오버플로우 위험 있음 |
반복문 | 메모리 사용이 안정적이며 빠름 | 코드가 다소 장황해질 수 있음 |
실제로 factorial(10000) 같은 큰 숫자를 계산할 때는 반복문이 더 안정적입니다. 최근 JavaScript 엔진에서는 꼬리 재귀 최적화(Tail Call Optimization)를 지원하지 않기 때문에, 재귀 호출이 깊어질 경우 성능 저하 또는 에러가 발생할 수 있습니다.
실습 추천: 자바스크립트 입문자에게
자바스크립트로 팩토리얼 함수를 직접 구현해보면서 함수 개념을 확실히 익힐 수 있습니다. 이와 함께 다음 학습 리소스를 추천드립니다:
- MDN Web Docs - JavaScript Functions: https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Functions
- Codewars (코딩 문제 실습): https://www.codewars.com/
- replit (브라우저에서 코드 실습): https://replit.com/languages/javascript
지금 바로 직접 구현해보며 자바스크립트의 기본기를 다져보세요
반응형
'Programing > Algorithm' 카테고리의 다른 글
JavaScript로 배우는 문자열 뒤집기 (String Reverse) (0) | 2025.05.23 |
---|---|
피보나치 수열의 이해와 자바스크립트 구현 (0) | 2025.05.22 |
JavaScript로 이해하는 하노이의 탑 (Tower of Hanoi) (0) | 2025.05.22 |
JS 피보나치(Fibonacci) (0) | 2025.05.22 |
너비 우선 탐색 (BFS: Breadth-First Search) 설명과 JavaScript 예제 (1) | 2025.05.22 |
깊이 우선 탐색 (DFS: Depth-First Search) 설명과 JavaScript 예제 (0) | 2025.05.22 |
이진 탐색 (Binary Search) 설명과 JavaScript 예제 (0) | 2025.05.22 |
선형 탐색 (Linear Search) 설명과 JavaScript 예제 (0) | 2025.05.22 |