Tower of Hanoy以这种方式解决问题,无非是定义如何完成工作的策略。和你的代码:
playHanoi(n-1, from, to, other); System.out.printf("Move one disk from pole %s to pole %s n ", from, to); playHanoi(n-1, other, from, to);基本上将您的策略定义为喜欢以下情况,
- 将 _ n-1个 磁盘从 _ “从” (源塔)移动到 _ “其他”_ (中间塔)。
- 然后将第 _ n 个磁盘从 _ “从” (源塔)移动到 _ “到”_ (目标塔)。
- 最后将 _ n-1个 磁盘从 _ “其他” (中间塔)移动到 _ “到”_ (目标塔)。
你
prinf基本上是使用 _ 2_ 档时。
现在,如果您编写这样的代码:
playHanoi(n-1, from, to, other); playHanoi(n-1, other, from, to); System.out.printf("Move one disk from pole %s to pole %s n ", from, to);然后,您基本上在做:
将 _ n-1个 磁盘从 _ “从” (源塔)移动到 _ “其他”_ (中间塔)。
然后将 _ n-1个 磁盘从 _ “其他” (中间塔)移动到 _ “到”_ (目标塔)。
最后,将第 _ n 个磁盘从 _ “从” (源塔)移动到 _ “到”_ (目标塔)。
在这种策略中,在做后 _ 2 次步骤(移动所有 n-1个 从磁盘 _ “其他” ,以 _ “至” ), _3
第三步变为无效(移动 _ ñ 从第磁盘 _ “从” 到 _ “至”_ )!因为Tower ofHanoy您不能将较大的磁盘放在较小的磁盘上!
因此,选择第二种选择(策略)会导致您采用无效策略,这就是为什么您不能这样做!



