재귀 함수의 호출 순서를 정리했다.
void hanoi_t(int n, char from, char tmp, char to)
{
if (n == 1)
printf("...........원판 1을 %c에서 %c로 옮긴다.\n", from, to);
else
{
hanoi_t(n - 1, from, to, tmp);
printf("원판 %d를 %c에서 %c로 옮긴다.\n", n, from, to);
hanoi_t(n - 1, tmp, from, to);
}
}
main()
{
hanoi_t(3, 'A', 'B', 'C');
}
편의상 그냥 A, B, C로 적었다.
hanoi_t(3, A, B, C)
hanoi_t(2, A, C, B)
hanoi_t(1, A, B, C)
원판 1을 A에서 C로 옮긴다.
원판 2를 A에서 B로 옮긴다.
hanoi_t(1, C, A, B)
원판 1을 C에서 B로 옮긴다.
원판 3을 A에서 C로 옮긴다.
hanoi_t(2, B, A, C)
hanoi_t(1, B, C, A)
원판 1을 B에서 A로 옮긴다.
원판 2를 B에서 C로 옮긴다.
hanoi_t(1, A, B, C)
원판 1을 A에서 C로 옮긴다.