! Copyright (c) 1994 Unicomp, Inc. ! ! Developed at Unicomp, Inc. ! ! Permission to use, copy, modify, and distribute this ! software is freely granted, provided that this notice ! is preserved. program test_hanoi implicit none integer :: number_of_disks read *, number_of_disks print *, "Input data number_of_disks:", & number_of_disks print * call hanoi (number_of_disks, 1, 3) contains recursive subroutine hanoi (number_of_disks, & starting_post, goal_post) integer, intent (in) :: & number_of_disks, starting_post, goal_post ! all_posts is the sum of the post values 1+2+3 ! so that the free post can be determined ! by subtracting the starting_post and the ! goal_post from this sum. integer :: free_post integer, parameter :: all_posts = 6 if (number_of_disks > 0) then free_post = & all_posts - starting_post - goal_post call hanoi (number_of_disks - 1, & starting_post, free_post) print *, "Move disk", number_of_disks, & "from post", starting_post, & "to post", goal_post call hanoi (number_of_disks - 1, & free_post, goal_post) end if end subroutine hanoi end program test_hanoi