Discuss / Python / 想了一晚上终于整理好怎么说了

想了一晚上终于整理好怎么说了

Topic source

这东西如果关注每一步是怎么进行的话是会看花眼的。

move函数本质上只做了一件事情:将一个盘子从待转柱(第一个位置参数)转移到目标柱(第三个位置参数)——这里借用zhoubangyan8给出的定义。 print('move', a, '-->', c)

如此,在第n次move之前还有n-1次,并且相邻两次移动不能在同一个柱子上,所以中转柱和目标柱互换。即: move(n-1, a, c, b)

第n次之后还要将中转柱上的n-1个盘子转移到目标柱,所以此时的中转柱变为待转柱,目标柱不能是转移出的柱子,所以不是a。即: move(n-1, b, a, c)

并且n=1为递归开始的条件,所以单独说明。

if n == 1:
        print('move', a, '-->', c)
        return

这样具体的步骤就变成透明的了。

至于两个move中的abc表示赋值到的不变常量,print中的abc表示def中的位置参数应该是比较容易理解的。

刚开始一头雾水不知如何下手,感谢各位精彩的解释,受益匪浅


  • 1

Reply