SEB _ FE _ 45
Section 3. Unit 1. [자료구조/알고리즘] 재귀
코드스테이츠 부트캠프 참여한지 벌써 2달이 지났다?
시간이 참 빠른 것 같다.
section2는 정신없이 유닛이 진행되어 "어어~!? " 하는 사이에 끝나버린 것 같아.. 제대로 된 이해를 위해 복습하면서 블로깅을 하도록 해야겠다.
Section3 는 그날 배운 내용을 바로 복습 블로깅을 목표로 해보도록 하겠다!(이미 하루 늦음..)
section3 첫 유닛은 재귀다!
재귀(recursion)란 사전적의미로 원래의 자리로 되돌아가거나 되돌아옴을 의미하는 단어이다.
재귀를 잘 사용하려면 재귀적 사고가 필요하다.
- 재귀 함수의 입력 값 출력 값 정의하기
- 가장 추상적으로 또는 가장 단순하게 정의하기
- ex ) A 함수 : 입력값 (Array(숫자를 요소로가진)) => 출력값 (Number)
- 문제를 쪼개고, 경우의 수를 나누기
- 문제를 쪼갤 기준 정하기 : 순서나 크기에 관계 없이 같은 방식으로 풀 수 있게 구분된 문제 만들기
- ex ) [1,2,3] 배열의 합을 구하는 함수를 재귀적으로 표현하면 => 1 + [2, 3] => 1 + 2 + [3] => 1 + 2 + 3 + [ ]
- 문제를 더이상 쪼갤 수 없는 경우(위 예시에서는 [ ](빈배열) 일 때)와 그렇지 않은 경우([1, 2, 3] 일 때)로 나누기
- 단순한 문제 해결하기 = 가장 쉬운 문제 해결하기 = base case
- 재귀의 기초(base case) === 재귀 함수의 탈출조건
- 문제를 최대한 잘게 쪼갠 후 문제 해결
- 복잡한 문제 해결하기 = recursive case 해결하기
- base case 가 해결되면 순차적으로 해결됨
재귀 함수의 코드 템플릿
function recursive(input1, input2, ...) {
// base case : 문제를 더 이상 쪼갤 수 없는 경우
if (문제를 더 이상 쪼갤 수 없을 경우) {
return 단순한 문제의 해답;
}
// recursive case : 그렇지 않은 경우
return 더 작은 문제로 새롭게 정의된 문제
}
정리 및 회고
재귀라는 말 자체가 어렵고, 개념도 설명하기 어려운데, 생각만큼 현업에서 많이 쓰이지는 않나 보다.
질의응답 세션 강사님이 말씀하시길, 현업에서 재귀는 잘 사용하지 않는다고 한다.
그 이유는 아래와 같이 답변해주었다.
혼자 하는 소규모 프로젝트가 아니고, 대규모 프로젝트를 팀 동료들과 코드를 공유해햐 하는데, 재귀함수를 사용한다?
재귀함수가 어떻게 작동하는지 꼬리물기로 타고 들어가야 하기 때문에 가독성이 떨어질 수 밖에 없다.
어차피 반복해야 하는 작업이라면 for루프가 가독성이 좋을수도 있다.
재귀에 대해 공부해보니, 사실 상 핵심은 ! 문제를 잘게 쪼갠다 ! 라고 생각한다.
위에서 언급한 것처럼 같은 방식으로 풀수 있는 문제로 구성해야 한다. 탈출 조건을 만들어야 한다 등 추가적인 내용이 필요하지만, 일단 잘 쪼개놓는게 가장 중요해보인다.
새로 시작하는 섹션 3! 부트캠프 3개월 차!
지금까지 배워온 것 중 부족한 부분을 점검해보고, 어떻게 보완할지 새롭게 공부 계획을 세워보자!
좌절은 짧게 하고, 까먹어버리자!
좌절에 소모해야 하는 메모리 비용이 너무 비싸다!
'SEB_FE_45(코드스테이츠) > section 3.' 카테고리의 다른 글
Unit 2] [사용자 친화 웹] UI/UX part.3 - Figma 클론 과제 (0) | 2023.06.15 |
---|---|
Unit 2] [사용자 친화 웹] UI/UX part.3 - Figma (0) | 2023.06.14 |
Unit 2] [사용자 친화 웹] UI/UX part.2 (1) | 2023.06.13 |
Unit 1] [자료구조/알고리즘] 재귀 part.2 (0) | 2023.06.13 |
Unit 2] [사용자 친화 웹] UI/UX part.1 (0) | 2023.06.13 |