汉诺塔问题

汉诺塔问题

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)
	}
}
posted @ 2020-07-14 16:08  侠奢  阅读(122)  评论(0)    收藏  举报