D.evelop [CS]/Algorithm
[Algorithm 014] JS - factorial
Danne
2021. 10. 9. 01:33
Q. 재귀를 사용하여 팩토리얼(factorial)을 구하는 함수를 구현해주세요.
팩토리얼이란 1에서부터 n까지의 정수를 모두 곱한것을 말합니다.
1! = 1
2! = 1 * 2
5! = 1 * 2 * 3 * 4 * 5
A. 답
const factorial = n => {
if( n === 0 ){
return 1;
}
return n * factorial(n-1);
}
factorial(3) // 6
if 를 적지 않았다가 RunJS가 뻗어버렸다.
- 재귀함수는 자신을 계속 호출하므로 이를 중단시키는 특정 조건문이 반드시 하나 이상 들어가야한다.
이것을 Base case(=Termination case)라고 한다. - 마지막에 1을 반환하는 이유 : 종료 값을 반환할 때 값에 지장을 주지 않기 위해 1을 곱한다.
1*1 = 1
2*1 = 2
3*1 = 3
turn 01
factorial(3) === 3 * factorial(3-1) = 3 * factorial(2)
turn 02
factorial(2) === 2 * factorial(2-1) = 2 * factorial(1)
turn 03
factorial(1) === 1 * factorial(1-1) = 1 * factorial(0)
factorial(0) === 1
자료 구조 중 stack의 LIFO로 실행된다고 한다. 그래서 3 * 2 * 1이 아닌 1 * 2 * 3으로 실행
반응형