어떠한 것을 정의할 때 자기 자신을 참조하는 것을 뜻한다.
따라서, 재귀 함수는 함수 자기 자신을 계속 호출하는 함수를 뜻한다.
재귀 함수의 두 가지 조건을 다음과 같다.
종료 조건
재귀적인 호출
아래 예시는 음수가 아닌 정수를 입력 받았을 때, 팩토리얼을 재귀 함수로 구현한 예시이다.
function factorial(num) {
if ( num <= 0 ) return 1; // 종료 조건
return num * factorial(--num); // 재귀적인 호출
}
아래 조건들을 지키지 않으면 콜스택은 오버플로우되고 에러가 발생한다.
재귀에 헬퍼 함수를 구현해보자.
기본적인 틀은 아래와 같다.
function outer(input) {
let outerScopedVariable = [];
function helper(helperInput) {
// modify the outerScopedVariable
helper(helperInput--)
}
helper(input)
return outerScopedVariable;
}
헬퍼 함수는 아래의 두 가지 구성요소로 이루어진다.
배열에서 모든 홀수값을 수집하는 간단한 예시를 헬퍼 함수로 구현해보자.
function collectOddValues(arr) {
let result = [];
function helper(helperInput) {
if(helperInput.length === 0) {
return;
}
if (helperInput[0] % 2 !== 0) {
result.push(helperInput[0]);
}
helper(helperInput.slice(1));
}
helper(arr);
return result;
}
배열에서 모든 홀수값을 수집하는 예시를 헬퍼 함수가 아닌 순수한 재귀 함수로 구현해보자.
function collectOddValues(arr) {
let newArr = [];
if(arr.length === 0) {
return newArr;
}
if(arr[0] % 2 !== 0) {
newArr.push(arr[0]);
}
newArr = newArr.concat(collectOddValues(arr.slice(1)));
return newArr;
}
순수 재귀 팁