이 글에서는 파이썬(Python)에서 for나 while 같은 반복문을 전혀 사용하지 않고 일정한 규칙에 따라 숫자 시리즈를 출력하는 방법을 재귀 함수를 활용해 살펴봅니다.
문제 정의
두 개의 정수 N과 K가 주어졌을 때, 아래 규칙에 따라 숫자 시리즈를 출력하는 것이 목표입니다.
- N에서 K를 계속 빼가며 값을 출력합니다.
- N이 0 이하가 되면, 이번에는 반대로 K를 더해가며 원래 값 N에 도달할 때까지 출력합니다.
예시:
N = 10 K = 4 출력 결과: 10 6 2 -2 2 6 10
알고리즘
- 함수를 재귀적으로 호출하되, N이 0보다 큰 동안에는 호출할 때마다 N에서 K를 뺍니다.
- N이 0 이하가 되면, 이후 호출부터는 N에 K를 더해 원래 값 N에 도달할 때까지 진행합니다.
- 뺄셈과 덧셈 과정을 하나의 함수로 처리하고, 불린(Boolean) 타입의 플래그 변수를 사용해 두 단계 사이를 전환합니다.
파이썬 구현
def print_number(n, original, k, subtracting=True):
# 현재 숫자 출력
print(n, end=" ")
# 숫자가 0 이하가 되면 덧셈 모드로 전환
if n <= 0:
subtracting = False
# 원래 값으로 돌아왔으면 재귀 종료
if n == original and not subtracting:
return
if subtracting:
print_number(n - k, original, k, subtracting)
else:
print_number(n + k, original, k, subtracting)
n = 10
k = 4
print_number(n, n, k)
실행 결과
10 6 2 -2 2 6 10
동작 원리
코드의 흐름을 단계별로 살펴보면 다음과 같습니다.
- 처음에는
subtracting=True상태로 시작하여 10 → 6 → 2 → -2 순서로 K씩 감소시키며 출력합니다. - -2에 도달하면
n <= 0조건이 참이 되어 플래그가False로 바뀌고, 이후에는 K를 더하는 방향으로 전환됩니다. - -2 → 2 → 6 → 10으로 증가하다가, n이 원래 값(
original)과 같아지고 덧셈 모드일 때 재귀 호출을 멈추고 함수가 종료됩니다.
이처럼 모든 변수는 하나의 함수 내에서 매개변수로 전달되며, 별도의 전역 변수나 반복문 없이 재귀 호출만으로 전체 시리즈가 완성됩니다.
결론
재귀 호출과 불린 플래그 변수만 활용하면 반복문 없이도 원하는 패턴의 숫자 시리즈를 간결하게 출력할 수 있습니다. 이 기법은 Python 3.x 및 그 이전 버전에서 모두 동작하며, 재귀의 기본 구조와 종료 조건 설계를 연습하기에 좋은 예제입니다.