%s" % (fr, to)) else : hanoi_tower(n - 1, fr, to, tmp) print("원판 %d: %s --> %s" % (n, fr, to)) hanoi_tower(n - 1, tmp, fr, to) hanoi_tower(3,'A','B','C') #원판의 개수, 시작 기둥, 보조기둥, 끝 기둥"> %s" % (fr, to)) else : hanoi_tower(n - 1, fr, to, tmp) print("원판 %d: %s --> %s" % (n, fr, to)) hanoi_tower(n - 1, tmp, fr, to) hanoi_tower(3,'A','B','C') #원판의 개수, 시작 기둥, 보조기둥, 끝 기둥"> %s" % (fr, to)) else : hanoi_tower(n - 1, fr, to, tmp) print("원판 %d: %s --> %s" % (n, fr, to)) hanoi_tower(n - 1, tmp, fr, to) hanoi_tower(3,'A','B','C') #원판의 개수, 시작 기둥, 보조기둥, 끝 기둥">
# 하노이의 탑
#n: 옮겨야 할 원판의 개수. 재귀 호출을 통해 이 값이 1이 될 때까지 줄어듭니다.
#fr (from): 원판이 현재 위치한 기둥. 시작 기둥을 나타냅니다
#tmp (temporary): 원판을 옮길 때 임시로 사용할 수 있는 보조 기둥.
#to (to): 원판을 최종적으로 옮겨야 할 목표 기둥.
#이 함수는 fr 기둥에 있는 원판 n개를 to 기둥으로 옮기는 과정을 재귀적으로 해결합니다.
def hanoi_tower(n, fr, tmp, to) :
if (n == 1) :
print("원판 1: %s --> %s" % (fr, to))
else :
hanoi_tower(n - 1, fr, to, tmp)
print("원판 %d: %s --> %s" % (n, fr, to))
hanoi_tower(n - 1, tmp, fr, to)
hanoi_tower(3,'A','B','C')
#원판의 개수, 시작 기둥, 보조기둥, 끝 기둥