함수가 자기 자신을 호출할 수 있어요
함수의 호출과 return을 배웠어요. 재귀는 함수 안에서 같은 함수를 다시 호출하는 방식이에요. 한 단계 커진 값을 계산하려면 그 전 단계 값이 필요할 때 사용할 수 있어요.
def pieces(day):
if day == 0:
return 1
previous = pieces(day - 1)
return previous * 2
0일에는 조각이 1개예요. 다음날마다 각 조각을 둘로 나누어요. pieces(2)는 먼저 pieces(1)을, pieces(1)은 pieces(0)을 호출해요. 그림은 입력이 줄어드는 호출 순서예요.
멈추는 조건에서 결과가 돌아와요
pieces(0)은 자신을 다시 호출하지 않고 1을 반환해요. 이를 기저 조건이라고 해요. 결과는 호출한 곳으로 되돌아가며 계산돼요.
| 호출 | 받아 온 이전 값 | 반환값 |
|---|---|---|
| pieces(0) | 필요 없음 | 1 |
| pieces(1) | 1 | 2 |
| pieces(2) | 2 | 4 |
호출할 때마다 day가 1 줄어야 0에 도착해요. 기저 조건을 없애거나 같은 day로 다시 호출하면 끝나지 않아요. 아래 과제도 기저값과 되돌아오는 계산을 구분해요.
직접 풀어봐요
처음에 조각이 1개 있어요. 하루가 지날 때마다 모든 조각을 2개씩으로 나누어요. pieces(day)라는 재귀 함수를 정의하고 day 일 뒤 조각 수를 출력해요.
입력은 한 줄의 정수 day(0~20)예요. 출력은 조각 수와 줄 바꿈이에요. 전체 프로그램을 작성해요.
예시 1: 입력 3 → 8. 1 → 2 → 4 → 8이에요.
예시 2: 입력 5 → 32예요.
예시 입력
3
예상 결과
8
예시 입력
5
예상 결과
32
핵심 개념
function-design: 재귀호출에서 입력을 줄이고, 기저 조건에서 멈춘 뒤 반환값을 계산해요.