Programing/Algorithm

자바스크립트로 팩토리얼 계산하기: 재귀함수 vs 반복문

2025. 5. 22. 22:50
반응형

자바스크립트를 배우는 초보 개발자라면 함수 개념을 익힐 때 꼭 한번 마주치는 예제가 바로 팩토리얼(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
'Programing/Algorithm' 카테고리의 다른 글
  • JavaScript로 이해하는 하노이의 탑 (Tower of Hanoi)
  • JS 피보나치(Fibonacci)
  • 너비 우선 탐색 (BFS: Breadth-First Search) 설명과 JavaScript 예제
  • 깊이 우선 탐색 (DFS: Depth-First Search) 설명과 JavaScript 예제
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (463) N
      • 금융 (61)
      • Programing (284) N
        • Algorithm (39)
        • API (2)
        • javascript (121)
        • CSS (8) N
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (17)
        • MS-SQL (1)
        • MySQL (12)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6) N
      • IT 일반 (15)
      • 리뷰 (1)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (32) N
        • 회고 (3) N
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    IT 관련
    Java
    IT·컴퓨터
    블로그
    It
    사고 싶은 책
    위시리스트
    읽고 싶은 책
    디자인패턴
    php
    SQL
    iT's MY LiFE
    js패턴
    기초
    JavaScript
    IT블로그
    자바
    자바스크립트유틸
    자바스크립트
    jsp
Dongkkase
자바스크립트로 팩토리얼 계산하기: 재귀함수 vs 반복문
상단으로

티스토리툴바