这道题需要经过中间柱,所以可以把操作分为两类:
- 移到中间柱子上
- 从中间柱移除
根据汉诺塔的思路,我们可以把汉诺n个盘子分为这样几步:
- 汉诺前n−1个盘子从起始柱子到中间柱子上
- 汉诺前n−1个盘子从中间柱子移出到起始柱子上
- 移动第n个柱子从起始柱子到中间柱(1步)
- 汉诺前n−1个盘子从终点柱子到中间柱子上
- 汉诺前n−1个盘子从中间柱子移出到终点柱子上
- 移动第n个柱子从中间柱移除到终点柱子(1步)
- 汉诺第n−1个柱子从起始柱子到终点柱(递归)
由于从中间到两边是移动是对称的,所以花的步数是相同的。
令hanoi2side(n)表示汉诺n个盘子从中间柱到两边柱子最少花费的步数。
令hanoi2mid(n)表示汉诺n个盘子从两边柱子到中间柱最少花费的步数。
所以按照刚才的过程,汉诺n个盘子所需的步骤hanoi(n)为
hanoii2mid(n−1)+hanoii2side(n−1)+1+hanoi2mid(n−1)+hanoii2side(n−1)+hanoi(n−1)
=2∗(hanoi2mid(n−1)+hanoii2side(n−1)+1)+hanoi(n−1)