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) 는?
🤔 확인 문제
하노이 탑의 점화식 T(n) = 2T(n−1) + 1 이 뜻하는 것은?
🤔 확인 문제
단순 재귀로 짠 피보나치가 느린 이유는?