📌 문제 요약
정수 N이 주어지면, 재귀함수를 N번 중첩하여 정해진 형식의 문장을 출력하라.
깊이(depth)마다 ____(언더바 4개)를 depth번 앞에 붙인다.
🔁 재귀 구조 이해
recursion(depth)
├─ depth == N 이면 → 베이스 케이스 (재귀 종료)
│ "재귀함수는 자기 자신을 호출하는 함수라네" 출력
└─ 아니면 → 이야기 3줄 출력 후 recursion(depth+1) 호출
호출 후 "라고 답변하였지." 출력
├─ depth == N 이면 → 베이스 케이스 (재귀 종료)
│ "재귀함수는 자기 자신을 호출하는 함수라네" 출력
└─ 아니면 → 이야기 3줄 출력 후 recursion(depth+1) 호출
호출 후 "라고 답변하였지." 출력
핵심: recursion(depth+1) 호출 이후에도 코드가 실행됨 → 재귀 반환 시 출력 발생
🐍 코드 분석
n = int(input())
print("어느 한 컴퓨터공학과 학생이 유명한 교수님을 찾아가 물었다.")
def recursion(depth):
c = "____" * depth # 들여쓰기 문자열
print(c + '"재귀함수가 뭔가요?"')
if depth == n: # 베이스 케이스
print(c + '"재귀함수는 자기 자신을 호출하는 함수라네"')
else: # 재귀 케이스
print(c + '"잘 들어보게. 옛날옛날 한 산 꼭대기에 이세상 모든 지식을 통달한 선인이 있었어.')
print(c + '마을 사람들은 모두 그 선인에게 수많은 질문을 했고, 모두 지혜롭게 대답해 주었지.')
print(c + '그의 답은 대부분 옳았다고 하네. 그런데 어느 날, 그 선인에게 한 선비가 찾아와서 물었어."')
recursion(depth + 1) # 재귀 호출
print(c + "라고 답변하였지.") # 복귀 후 항상 실행
recursion(0)
🌲 N=2 호출 트리
recursion(0)
→ 질문 출력 (들여쓰기 0)
→ 이야기 출력
→ recursion(1)
→ 질문 출력 (들여쓰기 ____)
→ 이야기 출력
→ recursion(2) ← 베이스케이스
→ "재귀함수는 자기 자신을 호출하는 함수라네" 출력
→ "라고 답변하였지." 출력
→ "라고 답변하였지." 출력
→ "라고 답변하였지." 출력
→ 질문 출력 (들여쓰기 0)
→ 이야기 출력
→ recursion(1)
→ 질문 출력 (들여쓰기 ____)
→ 이야기 출력
→ recursion(2) ← 베이스케이스
→ "재귀함수는 자기 자신을 호출하는 함수라네" 출력
→ "라고 답변하였지." 출력
→ "라고 답변하였지." 출력
→ "라고 답변하였지." 출력
⚠️ 자주 하는 실수
| 실수 | 설명 |
|---|---|
| 베이스 케이스 누락 | 무한 재귀 → RecursionError 발생 |
| 라고 답변하였지. 위치 | if/else 밖이어야 항상 출력됨. 안에 넣으면 출력 누락 |
| 들여쓰기 계산 오류 | depth가 아닌 다른 값으로 곱하면 형식 불일치 |
'크래프톤 정글 > 정글에서 문제풀기' 카테고리의 다른 글
| [정글 알고리즘]-[하]-2675 문자열 반복 (0) | 2026.03.12 |
|---|---|
| [정글 알고리즘]-[하]-백준4344 평균은 넘겠지 (0) | 2026.03.12 |
| [정글 알고리즘]-[하]-백준1978 소수 찾기 (0) | 2026.03.12 |
| [정글 알고리즘]-[하]-백준2562 최댓값 (0) | 2026.03.12 |
| [정글 알고리즘]-[중]-백준 10971 외판원 순회 2 (1) | 2026.03.12 |