
재귀 알고리즘(Recursion)은 함수가 자기 자신을 호출하는 것으로
이것은 문제를 더 작은 부분으로 나누어 해결하는 방식으로 동작하게 된다.

def factorial(num):
if num > 0:
return num * factorial(num - 1)
else:
return 1
print(f'10! : {factorial(10)}') # 3628800

def fibonacciRecursion(n):
if n == 1: return 0
elif n == 2: return 1
else:
return fibonacciRecursion(n-2) + fibonacciRecursion(n-1)

def euclidGCD(n1, n2):
if n1 % n2 == 0: return n2
else:
return euclidGCD(n2, n1 % n2)

# 목적: 원반 n개를 from막대에서 to막대로 이동
def moveDisc(discCnt, fromBar, toBar, viaBar):
if discCnt == 1:
print(f'{discCnt}번 disc: {fromBar}막대에서 {toBar}막대로 이동!')
else:
# 1. (n-1)개의 원반을 from막대에서 via막대로 이동
moveDisc(discCnt-1, fromBar, viaBar, toBar)
# 2. 큰 원반 1개를 from막대에서 to막대로 이동
print(f'{discCnt}번 disc: {fromBar}막대에서 {toBar}막대로 이동!')
# 3. (n-1)개의 원반을 via막대에서 to막대로 이동
moveDisc(discCnt-1, viaBar, toBar, fromBar)