Skip to content

factorial 알고리즘 구현

작성일: at 오전 06:18

Table of contents

Open Table of contents

Factorial 알고리즘을 구현하는 두 가지 방법

단순 반복문을 활용하는 방법

const fnum = 5 // 5!
let res = 1

for(let i = 1; i < fnum; i++) {
    res = res * (i + 1)
}

console.log(res) // 120

재귀 함수로 구현하는 방법

const factorial = (n) => {
    if (n === 0 || n === 1) return 1

    return n * factorial(n - 1)
}

console.log(factorial(5)) // 120

factorial(5) 함수의 반환 값을 얻으려면 factorial(4) 함수의 반환 값이 필요하고, factorial(4) 함수는 factorial(3), factorial(3)은 factorial(2), factorial(2)는 factorial(1)의 결과가 필요하다.

factorial(1)일때 재귀적 함수 호출이 멈추는 것을 알 수 있다.

따라서 5 -> 1 방향으로 호출이 이루어지고, 반대로 1 -> 5 방향으로 반환하면서 결과를 계산한다.

factorial 함수의 재귀 호출 시 스택 구조
factorial(1) (factorial(2) 함수에서 호출. 1 반환)
factorial(2) (factorial(3) 함수에서 호출. 2 반환)
factorial(3) (factorial(4) 함수에서 호출. 6 반환)
factorial(4) (factorial(5) 함수에서 호출. 24 반환)
factorial(5) (최초 함수 호출. 120 반환)