码迷,mamicode.com
首页 > 其他好文 > 详细

汉诺塔问题

时间:2020-07-14 16:34:30      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:func   拼接   else   pre   tps   问题   动画   lan   append   

汉诺塔问题

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

汉诺塔问题

标签:func   拼接   else   pre   tps   问题   动画   lan   append   

原文地址:https://www.cnblogs.com/newbase/p/13299640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!