꼬리재귀에 대하여...

김영진·2021년 2월 15일
0

Vanilla JavaScript_Basic

목록 보기
6/8
post-thumbnail

꼬리 재귀(Tail Recursion)

재귀함수의 콜 스택이 깊어질수록 메모리 오버헤드 (스택 오버 플로우 stack overflow)가 발생하는 문제를 해결하기 위한 재귀 호출 방식으로, 재귀함수의 실행 결과가 연산에 사용되지 않고 바로 반환되게 함으로써 이전 함수의 상태를 유지할 필요가 없도록 재귀 함수를 작성하는 것을 말한다.
But 꼬리 재귀가 동작하려면 플랫폼에서 TCO (Tail Call Optimization)를 지원해야 함.

// 일반 재귀함수
function factorial(n) {
  if (n === 1) {
    return 1;
  }
  return n * factorial(n -1);
};

// 꼬리 재귀함수
function factorialTail(n, acc) { //acc: accumulator
  if (n === 1) {
    return acc;
  }
  return factorialTail(n - 1, acc * n); 
//일반 재귀에서의 n * factorial(n - 1)과 달리 반환값에서 추가연산이 필요없음
}
function factorial(n) {
  return factorialTail(n, 1);
}
profile
UI개발자 in Hivelab

0개의 댓글