재귀 함수란?
Recursion, 자기 자신을 호출하는 함수
접근 방법
한 가지 문제를 가지고 end point(종료점)에 도달할 때 까지 더 작은 부분이나 변경되는 부분에서 반복적으로 수행한다.
사용 하는 이유
- 모든 곳에 사용된다.
- JSON.stringify, JSON.parse, DOM 등...
- 반복문으로 해결 가능한 문제를 재귀적으로도 접근할 수 있다.
기본 요소
1. 종료 조건
종료 조건이 무조건 있어야 한다. 그렇지 않으면 무한 루프에 빠지게 된다.
2. 다른 입력값
재귀 함수가 return 값을 제대로 정의하지 않거나 처음 호출할 때 사용한 매개변수와 다른 값을 사용하지 않는다면 잘못된 값을 반환하게 된다.
재귀 함수 종류
1. helper 메소드
결과를 저장하여 사용해야할 때 사용되는 패턴
재귀적이지 않은 외부함수가 재귀함수를 호출하는 패턴
function collectOddValues(arr) {
const 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;
}
2. 순수 재귀 함수
외부 데이터를 참조하지 않고 재귀 함수 내부의 데이터만 참조하는 재귀함수
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
}
배열을 복사하는 slice, concat, spread 연산자 등의 메서드를 사용하여 재귀함수 결과값을 합쳐준다.
문자열은 불변(immutable)하므로 slice, 배열화 하여 진행한다.
객체는 Object.assign, spread 연산자를 사용하여 복사할 수 있다.
참조
'Algorithm' 카테고리의 다른 글
[Udemy] 선택 정렬(Selection Sort)이란? (0) | 2024.07.26 |
---|---|
[Udemy] 버블 정렬(bubble sort)이란 ? (0) | 2024.07.25 |
[Udemy] Sliding window 관련 문제 풀이 (2) | 2024.07.22 |
[Udemy] Sliding Window 패턴 파악하기 (0) | 2024.07.20 |
[Udemy] Two pointer(투 포인터) 패턴 파악하기 (0) | 2024.07.19 |