publicstaticvoidhannota(int n, char A, char B, char C) { if (n == 1) { move(n, A, C); } else { hannota(n - 1, A, C, B); move(n, A, C); hannota(n - 1, B, A, C); } }
publicstaticvoidmove(int n, char from, char to) { System.out.printf("将编号为%d的盘子从柱子%c移动到柱子%c\n", n, from, to); }
funcHannota(n int, A, B, C byte) { if n == 1 { Move(n, A, C) // 只有一个盘子,直接从 A 移动到 C } else { Hannota(n-1, A, C, B) // 先将 n-1 这个盘子从 A 借助 C 移动到 B Move(n, A, C) // 经过上面的递归,n-1 这个盘子已经移动到了 B,现在将最后一个盘子 n 直接从 A 移动到 C Hannota(n-1, B, A, C) // 最后将 n-1 这个盘子从 B 借助 A 移动到 C } }
funcMove(n int, from, to byte) { fmt.Printf("将编号为%d的盘子从柱子%c移动到柱子%c\n", n, from, to) }
funcmain() { var n int fmt.Scanf("%d", &n) Hannota(n, 'A', 'B', 'C') }