python汉诺塔问题输出时加上序号

Python013

python汉诺塔问题输出时加上序号,第1张

1、首先,函数中有两个情况:(1)如只有一个盘子,则不需要利用B座,直接将盘子从A移动到C,在移动过程中可以不利用B座,(2)将最大盘子上面的n-1个盘子通过C为辅助盘移到B,B上的n-1个盘子由A为辅助盘移动C。(n-1个盘子的移动泽根据递归来实现)汉诺塔问题的递归终止条件即是A座上只有一个盘子。

2、其次,输出移动次数时,要求的宽度为4个字符,右对齐用{:>4}去实现。

解汉诺塔最简单的做法就是递归:

类似如何将大象装进冰箱:1)将冰箱门打开;2)把大大象放进去;3)把冰箱门关上……

我们将所有的盘都在同一个杆上从大到小排列视为【完美状态】,那么,目标就是将最大盘片为n的完美状态从a杆移到b杆,套用装大象的思路,这个问题同样是三步:

1)把n-1的完美状态移到另一个杆上;

2)把n移到目标杆上;

3)把n-1的完美状态移到目标杆上。

如下:

这是一个典型的递归程序

当只有一层的时候,直接把x放到z上结束

当大于1层的时候,先把x和z放到y上,然后继续递归

把y放到x上,然后放到z上,结束处理