주어진 숫자 n에 대해, 루프(반복문)를 전혀 사용하지 않고 특정 패턴의 수열을 출력하는 방법을 알아보겠습니다. 이 문제의 핵심은 재귀 함수(recursive function)를 활용하는 것입니다.
여기서 구현할 패턴은 n에서 시작해 5씩 감소하여 0(또는 음수)에 도달한 뒤, 다시 5씩 증가하며 처음 값 n으로 돌아오는 수열입니다.
예시
입력: n = 15 출력: 15 10 5 0 5 10 15
알고리즘
- 1단계: 숫자 n을 입력받습니다.
- 2단계: 감소 방향으로 이동하다가 목표값 n에 다시 도달하면 종료합니다.
- 3단계: 현재 0 또는 음수 쪽으로 이동 중인지 확인합니다.
- 4단계: 현재 값(m)이 5보다 크면 flag=True 상태로 재귀 호출하고, 그렇지 않으면 flag=False 상태로 재귀 호출합니다.
- 5단계: m이 5보다 크지 않다면 flag를 False로 설정합니다.
예제 코드
def printm(p, q, flag):
print(q)
if flag == False and p == q:
return
if flag:
if q - 5 > 0:
printm(p, q - 5, True)
else: # flag를 False로 바꿔 재귀 호출
printm(p, q - 5, False)
else: # flag가 False인 경우
printm(p, q + 5, False)
# 실행 코드
n = 15
printm(n, n, True)실행 결과
15 10 5 0 5 10 15
동작 원리
함수 printm은 세 개의 매개변수를 받습니다. p는 최종적으로 돌아와야 할 목표값, q는 현재 출력할 값, flag는 이동 방향을 나타냅니다.
- flag가 True일 때: 값이 5씩 감소하는 단계입니다.
q - 5가 여전히 0보다 크면 계속 감소 방향으로 재귀 호출하고, 그렇지 않으면 flag를 False로 바꿔 방향을 전환합니다. - flag가 False일 때: 값이 5씩 증가하는 단계입니다. 현재 값이 목표값 p와 같아지면 재귀 호출을 종료합니다.
이처럼 재귀 호출과 불리언 플래그만으로 for나 while 같은 반복문 없이도 원하는 수열 패턴을 손쉽게 구현할 수 있습니다.