go实现汉诺塔
package main import ( "flag" "fmt" "strconv" ) var num int // 可输入汉诺塔层数 var Hanoi [3][]int var disks int = 0 func init() { flag.IntVar(&num, "num", 100, "The greeting object.") } func main() { flag.Parse() if (num <= 0) { fmt.Printf("%v \n", "参数必须大于0") return } for i := num; i > 0; i-- { Hanoi[0] = append(Hanoi[0], i) } echo() hanoi(num, 0, 1, 2) } func move( from int, to int) { disks++ length := len(Hanoi[from]) Hanoi[to] = append(Hanoi[to], Hanoi[from][length-1]) Hanoi[from] = append(Hanoi[from][:length-1]) echo() } func hanoi(n int, A int, B int, C int) { if (n == 1) { move( A, C); } else { hanoi(n-1, A, C, B); move(A, C); hanoi(n-1, B, A, C); } } func echo() { fmt.Printf("移动第"+strconv.Itoa(disks)+"步:%v \n", "----------------------------------") fmt.Printf("塔A:%v \n", Hanoi[0]) fmt.Printf("塔B:%v \n", Hanoi[1]) fmt.Printf("塔C:%v \n", Hanoi[2]) }