이전 글에 작성된 재귀 함수는 단일 단독 함수(Single standalone function)이었다. 함수 내에서 자신을 직접 호출하는 방식이었다.
그러나 Helper Method Recursion
는 두 개의 함수가 있다. 재귀적이지 않은 외부 함수가 재귀 함수인 내부 함수를 호출하는 패턴이다.
function outer(input) {
var outerScopeVariable = [];
function helper(helperInput) {
helper(helperInput--)
}
helper(input);
return outerScopeVariable;
}
외부 함수(outer)와 재귀 함수(helper)가 있다. 재귀 함수는 이전 방식과 마찬가지로 자기자신을 호출한다.
이 방식은 배열 등을 다룰 때 유용하다.
이중 함수를 사용하지 않고, 배열을 다루는 방법에는 Pure Recursion
이 있다.
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;
}
collectOddValues([1,2,3,4,5,6]);
이 방법을 사용할 떄는, 배열을 변경시키지 않는 내장 메서드(slice, 전개 연산자 등)를 사용할 수 있다.