재귀함수를 쓰는 방법에는 여러가지가 있는데
헬퍼 함수처럼 재귀함수를 사용하는 방법이 있다.
아래는 주어진 배열 내 엘리멘트 중 홀수의 값만 배열에 담아 리턴하는 함수이다.
function collectiveOddValues(arr) {
let result = []
function helper(input) {
if (input.length === 0) return
if (input[0] % 2 !== 0) result.push(input[0])
return helper(input.slice(1))
}
helper(arr)
return result
}
- 함수 내 재귀함수로 사용할 함수를 따로 생성하여 문제 해결에 도움을 주는 패턴이다.
- 만약 collectiveOddValues를 재귀한다면 result값은 계속 초기화되기 때문에 재귀함수를 헬퍼 함수로 사용한다.
- 이 때, 재귀함수에 들어가는 어레이는 slice로 계속 맨 앞의 인덱스가 잘려나가며 들어가게 된다.
- 최종적으로 재귀함수의 input으로 들어간 어레이의 엘리먼트가 모두 사라지면 return된다.
- 최종적으로 result를 반환한다.
새로 배운 메서드/키워드
- array.slice(0, 2) 와 같이 slice가 실행되면, 이것의 return은 0번 인덱스부터 1번 인덱스까지 잘린 값이 되며,
- 기존 array는 0번과 1번 인덱스가 잘린 나머지 값이 된다.
- 어레이를 잘라서 이어붙이는 등의 알고리즘/문제풀이에 사용하면 편할 것 같다.
'알고리즘, 자료구조' 카테고리의 다른 글
[재귀] 피보나치 수열 (0) | 2022.11.07 |
---|---|
[재귀] pure recursive (0) | 2022.11.05 |
[재귀] 재귀(Recursion)란? (0) | 2022.11.03 |
(문제 해결 패턴) 슬라이딩 윈도우 (0) | 2022.11.02 |
(문제 해결 패턴) 멀티플 포인터 패턴 (0) | 2022.11.01 |