河内塔的递归

时间:2014-09-02 14:33:59

标签: recursion towers-of-hanoi

我已经阅读了河内塔问题陈述和解决方案。解决方案指出,当您必须将一组N个磁盘从A移动到B时,使用C作为临时值并将N-1个磁盘从A传输到C.然后将第N个磁盘从A传输到B然后传输N-1个磁盘从C到B.我知道问题的规模已经缩小,因此是递归实现的竞争者。但是,我们一次不能传输多个磁盘。我们如何才能首先传输N-1个磁盘。

2 个答案:

答案 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)