재귀 서브루틴을 이용한 하노이 탑 이동

PROGRAM Hanoi

IMPLICIT NONE

CHARACTER(*), PARAMETER :: Peg1 = "A", Peg2 = "B", Peg3 = "C"
INTEGER :: Number_of_Disks

WRITE (*, '(1X, A)', ADVANCE = "NO"), "디스크 수를 입력하시오(ex:3) : "

READ *, Number_of_Disks

PRINT *

CALL MOVE(Number_of_Disks, Peg1, Peg2, Peg3)

CONTAINS

RECURSIVE SUBROUTINE Move(N, StartPeg, AuxPeg, EndPeg)
INTEGER, INTENT(IN) :: N
CHARACTER(*), INTENT(IN) :: StartPeg, AuxPeg, EndPeg

IF (N == 1) THEN
PRINT *, "Move disk from ", StartPeg, " to ", EndPeg
ELSE
CALL Move(N - 1, StartPeg, EndPeg, AuxPeg)

CALL Move(1, StartPeg, " ", EndPeg)

CALL Move(N - 1, AuxPeg, StartPeg, EndPeg)
END IF
END SUBROUTINE Move

END PROGRAM Hanoi

위 소스를 07_09_Hanoi.f95로 저장

컴파일 및 프로그램 테스트



+ Recent posts