递归法实现汉诺塔问题
这里的汉诺塔问题稍加改动:从“左”不能直接到“右”,必须先从“左”到“中”,再从“中”到“右”;从“右”到“左”同理;即只能在相邻的柱子间移动。
思路:
process(int num, String from, String to)
函数,实现了第num
块,从from
柱子到to
柱子的移动过程- 移动分为两类,相邻柱子的移动,不相邻柱子的移动(如果是传统的汉诺塔问题则不用如此分类)
- 相邻柱子的移动:
从"左"到"中"
,从"右"到"中"
,从"中"到"左"
,从"中"到"右"
- 上面的
num - 1
层,从from
移到另一个柱子,即除了from
和to
的另一根柱子
- 然后第
num
块从from
到to
- 上面的
num - 1
层从另一个柱子到to
- 不相邻柱子的移动:
从"左"到"右"
,从"右"到"左"
- 上面的
num - 1
层从from
到to
- 第
num
块,从from
移到middle
- 然后第
num - 1
块从to
到from
- 第
num
块,从middle
移到to
- 上面的
num - 1
层从from
到to