12강 / 20강
점화식 — 자기를 자기로 설명하기
피보나치 · 하노이 · 그리고 알고리즘의 비용
토끼 한 쌍이 있습니다. 태어난 지 두 달이 지나면 매달 한 쌍씩 새끼를 낳아요. n개월 뒤 토끼는 몇 쌍일까요?
이번 달 토끼는 지난달 토끼 전부 + 두 달 전 토끼가 낳은 새끼입니다. 그래서 이렇게 쓸 수 있어요.
F(n) = F(n−1) + F(n−2), F(1) = F(2) = 1
이렇게 앞의 항으로 다음 항을 정의하는 식을 점화식(recurrence relation)이라 합니다. 11강의 귀납법과 정확히 같은 모양이에요 — 시작값(기초)과 넘기는 규칙(귀납).
점화식 = 재귀 함수. 한 줄씩 그대로 옮겨집니다.
Python
브라우저에서 실행
🎮 점화식 계산기
시작값과 규칙을 바꿔 가며 수열이 어떻게 자라는지 보세요. 재귀로 계산할 때 몇 번을 호출하는지도 세어 줍니다 — 같은 값을 몇 번이나 다시 계산하는지 보면 놀랄 거예요.
n을 30, 32로 올려 보세요. 차이가 폭발합니다.
Python
브라우저에서 실행
하노이 탑 — 점화식이 답을 알려 줍니다
원반 n개를 옮기려면 몇 번 움직여야 할까요? 생각해 보면 이렇습니다.
- 위의 n−1개를 보조 기둥으로 옮긴다 …
T(n−1)번 - 가장 큰 원반을 목표로 옮긴다 … 1번
- 보조 기둥의 n−1개를 목표로 옮긴다 …
T(n−1)번
T(n) = 2·T(n−1) + 1, T(1) = 1
이 점화식을 풀면 T(n) = 2ⁿ − 1 입니다. 원반이 하나 늘 때마다
시간이 두 배가 돼요. 64개짜리 전설의 탑은 5,800억 년이 걸립니다.
점화식 하나로 5,800억 년을 계산했습니다.
Python
브라우저에서 실행
같은 n인데 결과의 자릿수가 완전히 다릅니다.
Python
브라우저에서 실행
🤔 확인 문제
a(1) = 2, a(n) = 3·a(n−1) 일 때 a(4) 는?해설 2 → 6 → 18 → 54 입니다. 일반항으로는
a(n) = 2·3n−1 이고 2 × 27 = 54. 이렇게 일정 배수로 커지는 점화식을 등비수열이라 합니다.🤔 확인 문제
하노이 탑의 점화식
T(n) = 2T(n−1) + 1 이 뜻하는 것은?해설 앞의 n−1개를 두 번 옮겨야 하므로 대략 두 배씩 커집니다 (
2ⁿ−1). 이런 지수적 증가는 n이 조금만 커져도 감당할 수 없게 돼요.🤔 확인 문제
단순 재귀로 짠 피보나치가 느린 이유는?
해설
F(30)을 구하는 동안 F(10)을 수만 번 다시 계산합니다. 한 번 구한 값을 적어 두면(메모이제이션) 호출 수가 n에 비례하게 줄어들어요 — 답은 같고 방법만 바꾼 겁니다.