// 汉诺塔问题源自印度一个古老的传说,印度教的“创造之神”梵天创造世界时做了 3 根金刚石柱,
// 其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆盘。梵天命令一个叫婆罗门的门徒将所有的圆盘移动到另一个柱子上,
// 移动过程中必须遵守以下规则:
// 1.每次只能移动柱子最顶端的一个圆盘;
// 2.每个柱子上,小圆盘永远要位于大圆盘之上;
// 对于 n 个圆盘的汉诺塔问题,移动圆盘的过程是:
// 1.将起始柱上的 n-1 个圆盘移动到辅助柱上;
// 2.将起始柱上遗留的 1 个圆盘移动到目标柱上;
// 3.将辅助柱上的所有圆盘移动到目标柱上。
// 汉诺塔问题中,3 个圆盘至少需要移动 7 次,移动 n 的圆盘至少需要操作 2^n-1 次
package main
import "fmt"
// 定义移动的次数
var a int = 1
func hanoi(num int, sou string, tar string ,aux string){
// 如果盘子数只有一个直接移动到目标柱
if num == 1 {
fmt.Printf("第%d次从%s移动到%s\n",a,sou,tar)
a++
}else{
// 调用hanoi函数将n-1个盘移动到辅助柱上
hanoi(num-1,sou,aux,tar)
fmt.Printf("第%d次从%s移动到%s\n",a,sou,tar)
a++
// 调用hanoi函数将辅助柱上n-1个盘子移动到目标柱
hanoi(num-1,aux,tar,sou)
}
}
func main(){
var n int
fmt.Printf("请输入圆盘的个数:")
fmt.Scan(&n)
fmt.Printf("您输入的圆盘个数是:%d\n",n)
// 定义A为起始柱、B为目标柱、C为辅助柱
hanoi(n,"A","B","C")
}
09-19