def move(n, a, b, c): if n == 2: print a ,'-->', c return move(n-1,a,c,b) print a,'-->',c move(n-1,a,b,c) print a,'-->',b move(n-1,b,a,c) move(4,'A','B','C')
这个有没有错呢 错误的话该怎样算的呢 求讲解
枯树丶离殇
浏览 1081回答 2
2回答
Kidding1412
你只要一步一步的用人脑执行你写的程序,随便设一个n=5之类的,你就知道你写的程序的流程是不太合逻辑的。def move(n, a, b, c): #目的是从a移动到c if n == 1: #如果只有一层,直接移动 print a,'-->',c return move(n-1,a,c,b) #超过一层,将所有动作分解为3步,第1步,将n层中的上面(n-1)层做a到b的移动 move(1,a,b,c) #第2步,将a上面剩余的一层,做a到c的移动 move(n-1,b,a,c) #第3步,将之前移动的(n-1)层从b移动到c#至于(n-1)这些是怎么移动的,程序会重新嵌套调用,比如n=5,那么先把上4层由a移到b,第五层放c,再把那4层从b移动到c。这是move(5,a,b,c)。那由a移动到b的4层怎么移动呢,这是move(4,a,c,b)这个函数解决的,注意abc顺序。这样递归往下。就好理解了。move(10, 'A', 'B', 'C')