这东西如果关注每一步是怎么进行的话是会看花眼的。
move函数本质上只做了一件事情:将一个盘子从待转柱(第一个位置参数)转移到目标柱(第三个位置参数)——这里借用zhoubangyan8给出的定义。 print('move', a, '-->', c)
zhoubangyan8
print('move', a, '-->', c)
如此,在第n次move之前还有n-1次,并且相邻两次移动不能在同一个柱子上,所以中转柱和目标柱互换。即: move(n-1, a, c, b)
move(n-1, a, c, b)
第n次之后还要将中转柱上的n-1个盘子转移到目标柱,所以此时的中转柱变为待转柱,目标柱不能是转移出的柱子,所以不是a。即: move(n-1, b, a, c)
move(n-1, b, a, c)
并且n=1为递归开始的条件,所以单独说明。
if n == 1: print('move', a, '-->', c) return
这样具体的步骤就变成透明的了。
至于两个move中的abc表示赋值到的不变常量,print中的abc表示def中的位置参数应该是比较容易理解的。
刚开始一头雾水不知如何下手,感谢各位精彩的解释,受益匪浅
Sign in to make a reply
MADAO真可怕
这东西如果关注每一步是怎么进行的话是会看花眼的。
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为递归开始的条件,所以单独说明。
这样具体的步骤就变成透明的了。
至于两个move中的abc表示赋值到的不变常量,print中的abc表示def中的位置参数应该是比较容易理解的。