1. 재귀
- 어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 문제를 해결하는 방법
- 어떤 함수가 스스로를 호출하는 것
-----------------------------------------------------------------------------------
2. 쪼개서 생각하기
- 원래의 문제에서 출발하여 더 작은 경우를 생각한다.
- 계속해서 문제가 더는 작아지지 않을 때까지 더 작은 경우를 생각한다.
- 문제 풀기를 미루다가, 문제가 간단해져서 바로 풀 수 있게 되는 순간 미뤄왔던 문제들을 차근차근 해결한다.
-----------------------------------------------------------------------------------
3. 재귀가 적합한 경우
- 주어진 문제가( 구조는 비슷하고) 더 작은 문제로 나뉘어 질 수 있는 경우
- 중첩된 루프가 많거나 중첩의 정도 ( Number of Loops )를 미리 알 수 없는 경우
-----------------------------------------------------------------------------------
4. 재귀를 사용하면 좋은 점
- 사실 모든 재귀 함수는 재귀 호출 없이 while / for loop 로 표현이 가능하다.
- 하지만 재귀를 사용하는 경우, 재귀를 사용한 코드가 대부분의 경우 더욱 간결하고, 일부의 경우에는 이해하기도 쉽다.
-----------------------------------------------------------------------------------
5. 예제
function arrSum(arr) {
// 문제를 더 이상 쪼갤 수 없는 경우 ( 재귀를 끝냄 )
if(arr.length === 0) {
return 0;
}
// 그렇지 않은 경우
// 배열의 첫 번째 요소 head
const head = arr[0];
// 배열의 첫 요소를 뺀 뒷 부분의 배열
const tail = arr.slice(1);
// 이렇게 되면 배열안의 요소들의 합이 나오게 된다.
return head + arrSum(tail);
}
6. 느낀점
사실 여지껏 배운것에 대한 리뷰는 별로 안했는데, 드디어 재귀부분을 완전히 이해하고 넘어가서 속이 뻥 뚫린다.
드디어 재귀를 이해한덕에 알고리즘, 코딩 테스트들을 좀 더 편하게 풀 수 있고 생각하는 방식의 제한이 더 넓어졌다.
매우 만족스러웠고, 다음에 배우는 자료구조도 약한 부분이기에 충분히 학습하고 내 것으로 만들어가고 싶다.
'Java Script' 카테고리의 다른 글
JS - Graph & Tree & BST (0) | 2021.05.13 |
---|---|
JS - Stack&Queue (0) | 2021.05.13 |
JS - 객체 지향 (0) | 2021.05.10 |
JS - 고차함수 (0) | 2021.04.28 |
JS - DOM (0) | 2021.04.26 |