코드스테이츠 21일차

안형준·2022년 5월 24일
0

코드스테이츠

목록 보기
21/32
post-thumbnail

1차 학습 목표

재귀적으로 사고하는 법을 터득합니다.
문제를 잘게 쪼개어 사고하는 법을 활용할 수 있다.
메서드 자신의 재귀적 호출을 설명할 수 있다.
탈출 조건을 설정할 수 있다.

👻재귀적 사고 연습하기
1. 재귀 함수의 입력값과 출력값 정의하기
재귀적으로 사고하는 데에 가장 먼저 해야 할 일은 문제를 가장 추상적으로 또는, 가장 단순하게 정의하는 것이다.

2. 문제를 쪼개고 경우의 수를 나누기
문제를 쪼갤 기준을 정하고, 정한 기준에 따라 문제를 더 큰 경우와 작은 경우로 구분할 수 있는지 확인한다.

3. 단순한 문제 해결하기
문제를 여러 경우로 구분한 다음에는, 가장 해결하기 쉬운 문제부터 해결한다. 이것을 재귀의 기초(base case)이라고 부른다.
재귀의 기초는 나중에 재귀 함수를 구현할 때, 재귀의 탈출 조건(재귀 호출이 멈추는 조건)을 구성한다.

4. 복잡한 문제 해결하기
남아있는 복잡한 경우를 해결한다.

5. 코드 구현
👻반복문 vs 재귀
재귀를 사용하기 좋은 상황
1. 주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우
2. 중첩된 반복문이 많거나 반복문의 중첩 횟수(number of loops)를 예측하기 어려운 경우
3. 변수 사용을 줄여 mutable state (변경 가능한 상태) 를 제거하여 프로그램 오류가 발생할 수 있는 가능성을 줄이는 경우

오늘은 재귀함수에 대해 학습했다.
요즘들어 배우고 있는 내용들이 매일 새롭고 어렵기 때문에 이젠 놀라지도 않는다.
재귀함수 역시 학습하는데 만만치 않았다.
어느정도 학습을 마친 후 페어와 함께 알고리즘 문제를 풀어나가며 개념 정리를 한 기분이 들었다.
이래서 사람들이 너무 개념만 잡으려고 하지 말고 직접 구현해보면서 이해를 하는 것이 좋다고 말을 하는구나 라고 느꼈다.
앞으로는 매일 한문제씩이라도 알고리즘 문제를 풀어볼 생각이다.
원래는 자바의정석 전체 복습 후에 문제 풀이를 진행하려고 했으나 오늘 문제를 풀면서 문제에 접근할 수 있는 연습이 필요하다고 느껴졌기 때문에 쉬운 문제부터 차근차근 풀어볼 생각이다.
오늘도 정말 고생했고 내일도 파이팅!

profile
개발 공부

0개의 댓글