我已经阅读了河内塔问题陈述和解决方案。解决方案指出,当您必须将一组N个磁盘从A移动到B时,使用C作为临时值并将N-1个磁盘从A传输到C.然后将第N个磁盘从A传输到B然后传输N-1个磁盘从C到B.我知道问题的规模已经缩小,因此是递归实现的竞争者。但是,我们一次不能传输多个磁盘。我们如何才能首先传输N-1个磁盘。
答案 0 :(得分:0)
使用递归。另请参阅Tower of Hanoi: Recursive Algorithm和维基百科页面
递归如下:你知道如何移动1张光盘,假设你知道如何移动n-1张光盘,你如何移动n张光盘?
"假设"部分是你的递归:通过移动9,然后1然后9来移动10个光盘
要移动9张光盘,请移动8,然后移动1,然后移动8
移动8碟......
...
要移动2张光盘,请移动1,然后移动1,然后移动1。
答案 1 :(得分:0)
这是递归步骤。使用将N-1
磁盘从A传输到B的相同算法将N
磁盘从A传输到C.如果N
为1,则只需移动单个磁盘。 (或者,等效地,如果N
为零,则不执行任何操作)。
在伪代码中:
move(N, A, B):
if (N > 0)
move(N-1, A, C)
move_single_disk(A, B)
move(N-1, C, B)