동일한 구조의 더 작은 문제 해결하기!
반복문이 중첩되고 얼마나 반복되는지 모를 때,
즉 while을 쓰는 문제를 간단하게 표현할 수 있다고 생각하자
1. 입출력값 정의
2. 쪼개고 나누기
3. 탈출 조건 찾기 : base case(terminating case, 답을 바로 알 수 있는 해결하기 쉬운 문제)를 힌트로 한다.
4. 남은 복잡한 문제 해결하기
일반 재귀를 최적화하기 위해서 사용하며 꼬리재귀에서 탈출했을 때만 연산한다.
function factorialTail (num, acc) {
if(num === 1){
return acc
}
return factorialTail(num - 1, num * acc);
}
function factorial(num) {
return factorialTail(num, 1)
}
일반 재귀를 사용해 팩토리얼을 나타내면 아래와 같다.
function factorial(num) {
if(num === 0) {
return 1;
}
return num * factorial(n - 1)
// num : head, factorial(n - 1) : tail
}