Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 반복문 없이 재귀 함수로 수열 패턴 출력하기 (n → 0 → n)

주어진 숫자 n에 대해, 루프(반복문)를 전혀 사용하지 않고 특정 패턴의 수열을 출력하는 방법을 알아보겠습니다. 이 문제의 핵심은 재귀 함수(recursive function)를 활용하는 것입니다.

여기서 구현할 패턴은 n에서 시작해 5씩 감소하여 0(또는 음수)에 도달한 뒤, 다시 5씩 증가하며 처음 값 n으로 돌아오는 수열입니다.

예시

입력: n = 15
출력: 15 10 5 0 5 10 15

알고리즘

  1. 1단계: 숫자 n을 입력받습니다.
  2. 2단계: 감소 방향으로 이동하다가 목표값 n에 다시 도달하면 종료합니다.
  3. 3단계: 현재 0 또는 음수 쪽으로 이동 중인지 확인합니다.
  4. 4단계: 현재 값(m)이 5보다 크면 flag=True 상태로 재귀 호출하고, 그렇지 않으면 flag=False 상태로 재귀 호출합니다.
  5. 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 같은 반복문 없이도 원하는 수열 패턴을 손쉽게 구현할 수 있습니다.