이미지 출처


선행재귀란? #

재귀함수는 보통 재귀 호출부와 작업 수행부로 나눌 수 있습니다.

선행재귀는 작업을 수행하기 전에 재귀 호출부를 먼저 수행하는 재귀함수를 뜻합니다.

예시 #

아래의 함수는 실행부인 덧셈이 시작되긴하지만 완료되기 전에 재귀함수를 호출합니다. 따라서 재귀는 연속적으로 호출되다 기저조건을 만나 재귀호출부가 완전히 종료됩니다.

그 다음 실행부인 덧셈이 연속적으로 실행되고 콜스택이 모두 소진되면 답을 반환합니다.

/**
 * @param {number} n
 * */
function sum(n) {
    if(n <= 0) return;
    return n + sum(n - 1);
}