请问move(4, 'A', 'B', 'C')结果为什么有CA,CB?
def move(n, a, b, c):
if n == 1:
print a,'-->',c
return
move(n-1, a,b, c)
print a, '-->', b
print b, '-->', c
def move(n, a, b, c):
if n == 1:
print a,'-->',c
return
move(n-1, a,b, c)
print a, '-->', b
print b, '-->', c
2019-06-04
会提出这个问题应该是没理解清楚原理,先来分析这个场景,三个柱子,每一步的目标都是借助第三根柱子,来达到把最底下那块在两根柱子间转移的效果。一开始我们需要从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)
举报