재귀함수(recursive function)
- 재귀함수란?
- 어떤 문제를 해결할 때, 구조는 동일하지만 더 작은 경우를 해결함으로써 그 문제를 해결하는 방법
재귀함수의 접근법
- 1) 재귀 함수의 입력값과 출력값 정의하기
- 재귀 함수를 통해 어떤 문제를 풀고자 하는 가.
- 문제를 가장 추상적으로 또는 가장 단순하게 정리
- 2) 문제를 쪼개고 경우의 수를 나누기
- 주어진 문제를 어떻게 쪼갤 것인가
- 어떤 기준을 정하고 그 기준에 따라 문제를 더 큰 경우와 작은 경우로 구분할 수 있는 지 검토
- 일반적으로 입력값이 이 기준을 정하는 대상이 된다
- 이 때 중요한 관점은 순서와 크기이다. 주어진 입력값 또는 문제 상황을 크기를 기준으로 구분할 수 있거나, 순서를 명확하게 정할 수 있는지를 살펴보는 것이 도움이 된다. 만약 구분된 문제들을 푸는 방식이 같다면, 문제를 제대로 구분한 것이다. (코플릿 13, 14번 참고)
- 문제의 입력값에 따라 경우의 수를 나눈다. 일반적으로 문제를 더 이상 쪼갤 수 없는 경우와 그렇지 않은 경우로 나뉜다.
- 3) 단순한 문제 해결하기
- 문제를 여러 경우로 구분한 다음에는 쉬운 문제부터 해결한다. 이를 재귀의 기초(base case)이라고 부른다. 재귀의 기초는 나중에 재귀 함수 구현 시 재귀의 탈출 조건(재귀 호출이 멈추는 조건)을 구성하게 된다.
- 4) 복잡한 문제 해결하기
- 5) 코드 구현
Achievement Goals
- 재귀의 의미에 대해서 이해하고, 자바스크립트에서 재귀 호출을 할 수 있다.
- 재귀를 언제 사용해야 하는지 알고 있다.
- 재귀적 사고 연습을 통해 재귀 함수를 base case와 recursive case로 나눠서 작성할 수 있다.
- 자료 구조 중 Tree 구조에 재귀 함수를 사용하는 이유를 이해할 수 있다.
- 실생활에 사용 되는 유용한 Tree 구조를 알고 있다.
- 깊이를 알 수 없는 Tree 구조에 재귀 함수를 활용하여 모두 순회(traverse)할 수 있다.
회고
- 너어어어어무 어렵다.. 이해 된것 같다가도 또 어느부분에선 이해가 안되고, 분명 제일 밑에 값부터 가지고 올라와야하는데 나는 위에 값부터 계산해서 코플릿 문제를 풀어서 넘어가고, 사람들은 어떻게 제일 밑에 리턴된 값부터 올라오는 함수를 이렇게 한번에 쉽게 작성하지? 라는 생각까지 든다. 공부하면 할수록 어렵고 어렵다. 그나마 다행인것은 코플릿14번 문제를 민철 크루님이 정말 하나하나 쉽게 풀어서 설명해주신게 그나마 많은 도움이 되긴 했다. 근데 이게 또 다른 문제를 가니, 머리에 혼란이오는 증상이..... 여하튼 재귀는 민철 크루님 말대로 계속해서 해보는 것 밖엔 답이 없는것 같다. 재귀가 없는 세상은 없다고 하시니.. 될때까지 해보자 !!