Python/Python기초

Python 20_ 재귀함수(Reculsive Function)

Codezoy 2019. 12. 17. 10:29



     # factorial
     # 0! = 1
     # n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n


     def factorial1(n: int) -> int:
          result = 1
          for x in range(1,n+1):
               result *= x
          return result


     for x in range(6):
          print(f'{x}! = {factorial1(x)}')


실행 결과
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120




     def factorial2(n: int) -> int:
          if n == 0:                 # 종료 조건
               return 1
          elif n > 0:
               return factorial2(n-1)*n


     for x in range(6):
          print(f'{x}! = {factorial2(x)}')


실행 결과
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120




하노이의 탑


# 재귀 함수를 사용한 하노이 탑
     def hanoi_tower(n, start, target, aux):
     """
     재귀 함수를 사용해서 하노이 탑 문제 해결 방법 출력

     :param n: 옮길 원반 갯수(양의 정수)
     :param start: 원반들이 있는 시작 기둥 번호
     :param target: 원반들을 모두 옮겨 놓을 타겟 기둥 번호
     :param aux: 보조 기둥으로 사용할 기둥 번호
     :return: None
     """
          if n == 1:
               print(f'{start} -> {target}')
               return # 함수 종료

# (n-1)개의 원반을 target을 보조 기둥으로 사용해서
# aux 기둥으로 모두 옮김
          hanoi_tower(n - 1, start, aux, target)
# 시작 기둥에 남아 있는 한개의 원반을 목표 기둥으로 옮김
          print(f'{start} -> {target}')
# aux 기둥에 남아 있는 (n-1)개의 원반을
# start 기둥을 보조 기둥으로 사용해서 target으로 옮김
          hanoi_tower(n - 1, aux, target, start)


# 원반 한 개짜리 하노이 탑
     for n in range(1, 5):
          print('하노이 탑 n=', n)
          hanoi_tower(n, start=1, target=3, aux=2)
          print('================================')