크래프톤 정글/정글에서 문제풀기

[정글 알고리즘]-[하]-백준17478 재귀함수가 뭔가요?

cedis 2026. 3. 12. 14:13

📌 문제 요약

정수 N이 주어지면, 재귀함수를 N번 중첩하여 정해진 형식의 문장을 출력하라.
깊이(depth)마다 ____(언더바 4개)를 depth번 앞에 붙인다.

🔁 재귀 구조 이해

recursion(depth)
├─ 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) ← 베이스케이스
          → "재귀함수는 자기 자신을 호출하는 함수라네" 출력
          → "라고 답변하였지." 출력
      → "라고 답변하였지." 출력
  → "라고 답변하였지." 출력

⚠️ 자주 하는 실수

실수 설명
베이스 케이스 누락 무한 재귀 → RecursionError 발생
라고 답변하였지. 위치 if/else 밖이어야 항상 출력됨. 안에 넣으면 출력 누락
들여쓰기 계산 오류 depth가 아닌 다른 값으로 곱하면 형식 불일치