汉诺塔问题

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)
	}
}

以上是关于汉诺塔问题的主要内容,如果未能解决你的问题,请参考以下文章

汉诺塔问题的详解-附代码

C语言汉诺塔问题

代写Haskell程序 汉诺塔汉诺塔编程代码代写

递归_汉诺塔问题

汉诺塔(代码记录+注释)

详解汉诺塔问题