[재귀 함수]
😵💫 재귀 함수란, 자기 자신을 호출하면서 반복적인 기능을 수행하는 것이다. 반복적인 작업이 필요한 문제를 보다 간결한 코드로 표현할 수 있게 된다. 반복문과 달리 코드를 직관적으로 이해하기는 어렵다. 메서드 반복 호출에 따라 stack을 과도하게 사용하여 메모리를 많이 잡아먹기도 한다. 그럼에도 변수를 여러개 사용할 필요가 없고 간결하다는 장점이 있다.
일반적인 템플릿은 Base case와 Recursive case로 나누어 작성하는 것이다. 문제를 작게 쪼개 더이상 쪼갤 수 없는 경우의 수를 구한다면 탈출 조건을 설정 가능하다. 이를 Base에 작성하고, 작게 쪼갠 문제를 해결할 수 있는 코드를 Recursive에 적어주는 것이다. 하지만 너무 일반적인 템플릿에만 맞추어 작업한다면 사고가 제한될 것이다.
재귀함수는 꾸준히 접해왔던 개념이었지만, 직접 활용해보지는 않았다. 이번 챕터를 배우면서, 그래 이렇게 하면 되는구나. 재귀 호출로 구구단을 구현하는 것을 보며 그래 잘 알겠다! 생각했지만.. 막상 해보려니 진짜 진짜 진짜 쉽지 않았다. 또, 코플릿을 풀 때는 계속 같은 패턴으로 코드를 작성하다 보니 엔지니어님의 말씀대로 쉽게 매몰될 수 있겠구나 라는 생각을 했다. 고정관념이 너무나도 생겨버릴 것 같은 느낌ㅎㅎ 재귀는 실무에선 많이 쓰이지 않지만, 탐색 등의 알고리즘을 이해하는 데에 도움이 된다고 하니 개념을 잘 잡아둬야 할 거 같은 느낌이 든다.
[재귀적 사고 연습]
😵💫 재귀를 공부하며 푼 문제의 유형이 꽤 많이 있다. 배열 요소 더하기, 팩토리얼 구현, 피보나치 구현, 원하는 개수만큼 배열에 요소 삽입 또는 삭제, 논리연산, 배열 요소 거꾸로 넣기 등이 있었다.
코플릿을 통한 연습에서는, 처음엔 낯선 탓에 많이 헤맸지만 여러 문제를 풀면서 꽤 익숙해질 수 있었다. 하지만! 몇몇 문제가 나와 페어분을 넘나 힘들게 했고ㅎㅎ 가까스로 잘 해결은 했지만 결국 얼마 전 문제를 한 번씩 다시 열어보았다. 그래도 어려운 재귀.. 그 재귀 호출에 대한 과정이 왜 이렇게 잘 그려지지 않는 건지 모르겠다.ㅠㅠ
[StringifyJSON (과제 챕터)]
😵💫 JSON은 데이터 교환을 위한 일종의 포맷이다. Key-Value로 이루어져 데이터를 전달한다. 프로그래밍 언어나 플랫폼에 독립적이다. 특히 AJAX 등의 통신에 쓰이는 데이터를 표현하는 데에 적합하다.
주어진 과제는 Object 타입의 매개변수를 받아 String 형식으로 내보내는 것이었다. 단순 참조변수들은 toString으로 처리하면 간단했지만, 배열과 Map은 재귀함수를 사용해서 처리해야 했다.
처음 과제를 봤을 때는 이걸 왜 몇 시간 동안이나 하게 일정을 짰을까..? 라고 생각했다. 하지만... 시간을 거의 다 써도 모든 테스트 케이스를 해결하기 힘들었다ㅎㅎ 결과는 만들어냈지만 테케에 쓰이는 원본을 자꾸 건들면서 기대값이 계속 변했고.. 오답처리가 되면서ㅠㅠ 많이 헤맸ㄷㅏ. 또, 조금 억울한 점은.. 코플릿을 풀면서 개념을 익히고 익숙해지기 위해 반복문으로 해결할 수 있는 문제도 재귀만을 사용해서 풀었었는데, 이번 과제도 반복문 사용이 금지된 줄 알고 엄청 간단하게 작성할 수 있는 것을 많이많이 돌아갔다. 알고보니 반복문을 사용할 수 있었다ㅎㅎ 지난 이야기지만 이 날 엄청 속터졌던 기억이 있다. 재귀가 밉고 세상이 미웠다ㅋㅋ
🎢 Unit 1. 재귀를 마치고!
정말정말 쉽지만은 않은 유닛이었다. ㅠㅠ 섹션을 시작하면서부터 너무 많은 위기에 봉착을 해버려서(ㅋㅋ) 훗날 배울 자료구조, 알고리즘도 하기싫고 많이 위축되었던 것 같다. 그래도 문제를 많이 풀어보고 여러 방식으로 해결해보면서, 학습 전보다는 확실히 재귀에 대한 이해도가 높아졌다는 건 알겠다. 웬만하면 실무에서 사용하지 않을 방식들(반복문 대신 재귀 활용, Object를 매개변수로 받기 등등.....)이지만, 학습을 위해 끙차끙차 했던 것이니까 그래도 만족한다! JSON은 웹 통신에 있어서 너무나도 많이 쓰이고 중요한 내용이었기 때문에, 학습이 어렵지는 않았다. 그만큼 많이 접해보았기 때문이다! 면접을 보러 가면 꽤 많은 기업에서 JSON에 대한 질문을 했던 것 같기도 하다... 무튼 내용은 많이 없었지만~~ 날 괴롭혔던 재귀 회고 끝.
'공부기록 > 유닛 회고' 카테고리의 다른 글
S2U3 코딩 테스트 준비 회고 (0) | 2022.11.30 |
---|---|
S2U2 [자료구조/알고리즘] 자료구조 회고 (0) | 2022.11.27 |
SEB BE 42기 Section 1 회고 (0) | 2022.11.16 |
S1U10 [Java] 심화(Effective) 회고 (2) | 2022.11.16 |
S1U9 [Java] 컬렉션(Collection) 회고 (0) | 2022.11.15 |
댓글