프로그래밍 기초편 · 재귀와 분할 정복

재귀: 큰일을 같은 작은 일로 쪼개기

“웹사이트 만들기”는 무섭게 들리고, “홈 카피 세 줄 쓰기”는 누구나 할 수 있어요. 엔지니어링 심화편에서 Coding Agent가 큰 요구를 받으면 스스로 작은 작업 목록을 만드는 걸 보셨죠—그 사고에 이름이 있습니다: 재귀. 이번 강의는 코드 한 줄도 안 씁니다. 작업 트리를 클릭하고 슬라이더를 끌면, 프로그래머들이 가장 신비롭게 말하는 그 단어를 손에 넣을 수 있어요.

한 판 먼저 · Agent의 작업 쪼개기 돕기

상사가 한 마디를 던집니다: “버블티 가게 웹사이트 만들어.” 바로 손댈 수는 없지만 쪼갤 수는 있어요. 아래 카드를 눌러 큰 일을 층층이 열고, ✋ “바로 할 수 있음”인 작은 일까지 쪼갠 뒤 “착수”를 누르세요. 두 가지를 보세요: 쪼갤 때는 위에서 아래로 펼쳐지고, 끝나면 초록이 아래에서 위로 “버블링”하며 모입니다.

맨 위 큰 작업을 먼저 눌러 열어 보세요
보이시나요? “웹사이트 만들기”와 “홈페이지 만들기”는 사실 같은 종류의 문제—규모만 더 작아요. “웹사이트 만들기”를 쪼개는 방법(몇 덩어리로 나누고 각 덩어리를 또 쪼개기)이 “페이지 디자인”에도 그대로 쓰입니다. 같은 수법으로 갈수록 작아지는 같은 종류의 문제를 다루는 것, 그게 재귀예요. Agent 작업 쪼개기, 폴더 순회(폴더 안의 폴더), 회사 KPI 계단식 배분—전부 이 한 수법입니다.
한 번 더 · 규칙 하나로 나무 그리기

재귀의 가장 신기한 점: 규칙은 하나뿐인데 결과는 한없이 복잡할 수 있어요. 아래 나무의 전체 설명서는 한 문장입니다(그림 아래). 슬라이더로 “쪼개기 층수”를 깊게 하고 보세요: 새 가지는 모두 이전 가지의 축소판—규칙은 처음부터 끝까지 안 바뀌고, 바뀌는 건 규모뿐이에요.

🌱 전체 규칙: 가지 하나를 그리고, 끝에서 두 갈래로 나누며, 각 갈래는 “축소판인 나”—이 규칙의 처음으로 돌아갑니다.
2층 가지 총 3개
“스스로를 호출하기”가 바로 이 뜻이에요.“가지 하나 그리기” 규칙의 마지막 단계는 다시 “가지 하나 그리기”를 실행하는 것입니다. 프로그램의 재귀 함수도 똑같아요: 함수 본문 마지막 줄이 스스로를 호출하되, 넘기는 문제만 더 작습니다. 8층이면 가지 255개—규칙 하나, 큰 나무 하나.
개념 카드 · 재귀 3종 세트

방금 두 데모 안에 재귀의 요건 세 가지가 모두 숨어 있어요. 앞으로 어떤 재귀를 보든 이 세 줄로 검수하세요:

1

같은 일

“웹사이트 만들기”와 “홈페이지 만들기”는 같은 종류의 문제라 같은 쪼개기 수법을 쓸 수 있어요. 쪼개 나온 하위 문제가 전혀 다른 일이면 재귀는 쓸 수 없습니다.

2

규모가 더 작음

한 층 쪼갤 때마다 문제는 한 바퀴 작아져야 합니다: 웹사이트 → 섹션 셋 → 페이지 하나. 프랙탈 나무의 각 갈래도 이전보다 짧아요. 작아지지 않으면 영원히 쪼개지지 않습니다.

3

종료 조건

✋ “바로 할 수 있음”인 잎에 도달하면 멈춰야 해요. 이 조항이 제일 치명적입니다—자매편 스택 강의에서 보셨죠: 재귀가 한 층 깊어질 때마다 스택에 한 층이 쌓이고, 종료 조건이 없으면 스택 오버플로(Stack Overflow)예요.

AI와의 관계를 한 층 더:Agent에게 “프로젝트 전체를 리팩터”하라고 하면, 먼저 하위 작업을 나열하고 “로그인 모듈 리팩터”가 아직 크면 계속 아래로 쪼갭니다—각 항목이 “파일 하나 수정”처럼 바로 실행할 동작이 될 때까지. “충분히 작아서 손댈 수 있다”고 판단하는 그 순간이 종료 조건입니다. 다음 강의에서, 쪼갠 결과를 다시 치는 것이 바로 컨텍스트 압축 Compaction의 원리임을 보게 됩니다.

이 강의가 전하고 싶은 것