본문 바로가기
Java Script

JS - 재귀

by 호지96 2021. 5. 12.

1. 재귀

  1. 어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 문제를 해결하는 방법
  2. 어떤 함수가 스스로를 호출하는 것

-----------------------------------------------------------------------------------

2. 쪼개서 생각하기

  1. 원래의 문제에서 출발하여 더 작은 경우를 생각한다.
  2. 계속해서 문제가 더는 작아지지 않을 때까지 더 작은 경우를 생각한다.
  3. 문제 풀기를 미루다가, 문제가 간단해져서 바로 풀 수 있게 되는 순간 미뤄왔던 문제들을 차근차근 해결한다.

-----------------------------------------------------------------------------------

3. 재귀가 적합한 경우

  1. 주어진 문제가( 구조는 비슷하고) 더 작은 문제로 나뉘어 질 수 있는 경우
  2. 중첩된 루프가 많거나 중첩의 정도 ( Number of Loops )를 미리 알 수 없는 경우

-----------------------------------------------------------------------------------

4. 재귀를 사용하면 좋은 점

  1. 사실 모든 재귀 함수는 재귀 호출 없이 while / for loop 로 표현이 가능하다.
  2. 하지만 재귀를 사용하는 경우, 재귀를 사용한 코드가 대부분의 경우 더욱 간결하고, 일부의 경우에는 이해하기도 쉽다.

-----------------------------------------------------------------------------------

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