느리더라도 꾸준히

회고록(17) - 재귀 본문

(CodeStates)Daily memoir

회고록(17) - 재귀

테디규 2022. 11. 18. 00:47

1. 데일리 일기

오늘 부터 알고리즘 문제에 들어갔다. 오랜만에 머리를 제대로 쓰는 기분이라 머리가 아팠다... 그래서 저녁먹고 바로 3시간이나 잤다; 패턴 꼬일가봐 걱정이다 ㅠ

익숙치 않아서 많이 당황했는데, 강사님이 모든 문제 유형을 경험해 봐야 유형이 파악될 수 있다고 이야기 해주셨다. 결국 백문이 불여일타인듯 하다.

그리고 알고리즘 문제를 최소 일주일에 한번은 다시 복습해서 까먹지 않게 해달라고 하셨다. 일주일 지나면 다시 풀어보자ㅎ

2. 오늘 배운 내용

(브레인 스토밍 후, 핵심 내용들을 요약해서 작성하자. 절대 복붙 X, 나만의 단어로 표현하기.)

재귀 알고리즘

재귀 알고리즘이란?

  • 큰 문제를 작은 문제 단위로 쪼갠후 작은 문제단위를 해결하면서 최종적으로 큰 문제를 해결하는 알고리즘

장점

  • 불필요한 여러개의 반복문을 막음으로써 가독성 있게 코드 작성이 가능하다.
  • 변수 사용을 줄일 수 있다.

단점

  • 직관적인 코드흐름 파악이 되지는 않는다.
  • process 스택에 메서드가 쌓임으로 반복문 보다 훨 씬 더 많은 메모리를 사용한다.
  • 컨텍스트 스위칭 비용이 메소드 호출 시점과 메서드의 값을 return 하면서 계속 발생한다.

문제 접근 방식

  1. 문제를 제대로 읽자. 문제에 재귀 탈출 조건을 주는 경우가 많다.
  2. 입력값을 이용해서 탈출조건(더이상 쪼갤수 없는 문제 상태)를 구하고 return 해준다. (ex 배열의 크기, 정수값)
  3. 쪼갤 수 있는 문제는 입력값을 이용하여 재귀로 순회하며 작은 단위로 쪼갠다.

3. 모르겠는 내용

(왜 모르겠는지 차근차근 문제를 적어보고, 해결 방안을 적어봅시다.)
컨텍스트 비용을 잘 모르겠는데, PCB에 상태를 저장하는 경과를 잘 몰라서 그런것 같다.

따로 정리해서 블로그에 정리해야할 것 같다.

Comments