为什么最后一个move不需要print
为什么最后一个move不需要print??
为什么最后一个move不需要print??
2019-04-12
会提出这个问题应该是没理解清楚原理,先来分析这个场景,三个柱子,每一步的目标都是借助第三根柱子,来达到把最底下那块在两根柱子间转移的效果。一开始我们需要从a->c,所以需要把剩下的3片移到b柱上(步骤1),这时,对于a柱上的剩下3片来说,就是需要借助c柱移动到b柱上(步骤2),那么,对于再上面的两片来说,又是借助b柱移动到c柱上(步骤3),所以一开始是ab,ac,bc(步骤3),然后ab,此时第三片到b柱上了,又要把c柱上的两片移到b柱上,所以是ca,cb,ab(步骤2),之后也都是这个套路。
所以这个递归的原理就是,移4片到c,需要借助移3片到b,而移3片到b,就要借助移2片到c,以此类推
首先,算法里的abc都是不一定的,要看每一步的目标是什么
所以算法的第一步是move(n-1,a,c,b) 意思是把a上的n-1片移到相对的b上,这样a才能移到c上
第二部是把最后一片移到c上,所以是 a -> c
最后一步就是把b柱上的移到c上,所以是move(n-1,b,a,c)
所以为什么最后一个move不用print,因为每一步的目的只是把底片移到目的柱上,相对而言就是中间的 a->c,而这个操作在每次递归中都会执行一次,构成了完整的过程
举报