汉诺塔问题
Posted newbase
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汉诺塔问题相关的知识,希望对你有一定的参考价值。
汉诺塔问题
golang 递归 实现经典汉诺塔问题
// 从A-->C ,借助B
func hanota(A []int, B []int, C []int) []int {
n := len(A)
helpHanota(n, &A, &B, &C)
return C
}
func helpHanota(n int, A ,B ,C *[]int){
if n == 1 {
// 如果A只剩一个元素,则令C拼接A的最后一个元素,将A置空
*C = append(*C, (*A)[len(*A)-1])
*A = (*A)[:len(*A)-1]
} else {
// 将前面n-1个元素从A移动到B,操作完之后C为空,A只剩一个
// 从 A-->B,借助C
helpHanota(n-1, A, C, B)
// 将A仅剩的那个,也就是最大的元素放到C上面
*C = append(*C, (*A)[len(*A)-1])
// 将A置空
*A = (*A)[:len(*A)-1]
// 再以A(此时为空作为中转)递归进行
// 从 A-->C,借助B
helpHanota(n-1, B, A, C)
}
}
以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章