[Algorithm] 재귀호출 공부하기

Sungjin Cho·2025년 3월 25일
1

Algorithm

목록 보기
14/15
post-thumbnail

재귀호출 관련(백트래킹, DFS) PS에 특히 약하기 때문에 재귀호출을 제대로 공부해보려 한다.

재귀호출 PS 주요 종류

단순 재귀

  • 예: 팩토리얼(Factorial), 피보나치 수열(Fibonacci Sequence)
  • 특징: 문제를 작은 단위로 쪼개서 반복적으로 호출하며 해결. 종료 조건(Base Case)이 명확함.

분할 정복

  • 예: 병합 정렬(Merge Sort), 퀵 정렬(Quick Sort), 하노이 탑(Tower of Hanoi)
  • 특징: 문제를 여러 하위 문제로 나누고(Divide), 각각을 해결한 뒤 합침(Conquer).

백트래킹

  • 예: N-Queen 문제, 미로 찾기, 부분 집합 생성
  • 특징: 해를 찾는 과정에서 조건에 맞지 않으면 이전 단계로 돌아가 다른 경로를 탐색.

트리/그래프 순회 (DFS, 이진트리순회)

  • 예: DFS(깊이 우선 탐색), 이진 트리 순회(Inorder, Preorder, Postorder)
  • 특징: 노드를 재귀적으로 방문하며 탐색.

DP와의 결합

  • 예: 피보나치 수열(메모이제이션 적용), 배낭 문제(Knapsack Problem)
  • 특징: 중복 계산을 피하기 위해 결과를 저장하며 재귀를 최적화.

1. 기본 개념 익히기

  • 재귀의 핵심: 재귀는 문제를 더 작은 문제로 나누고, 그 문제를 동일한 방식으로 해결하는 방식이다.
  • 필수 요소:
    • 종료 조건: 재귀가 끝나는 지점 (예: depth = 5 일 때 멈춤)
    • 재귀 호출: 문제를 작게 쪼개서 자신을 호출
  • 연습: 팩토리얼과 피보나치 수열을 손으로 써보며 호출 과정 그려보기

트리 구조로 재귀 스택을 그리면 더 보기 쉽다.

2. 사고 방식 연습

  • 문제 쪼개기: 이 문제를 더 작게 만들면 어떻게 될까? 를 고민
  • 스택 이해: 재귀는 내부적으로 호출 스택을 사용. 스택이 어떻게 쌓이고 해제되는지 상상, 적으면서 문제 풀기
  • 예시: 하노이 탑 문제를 풀 때 "n-1개의 원판을 옮기고, 남은 하나를 옮기고, 다시 n-1개를 옮긴다"로 분해.

💡 팁: 재귀 호출을 트리 형태로 그려보기

0개의 댓글