Recursion 河内塔中的递归
我已经阅读了河内塔的问题陈述和解决方案。该解决方案指出,当您必须将一组N个磁盘从a移动到B时,请使用C作为临时磁盘,并将N-1个磁盘从a转移到C。然后将第N个磁盘从a转移到B,然后将N-1个磁盘从C转移到B。我知道问题的大小已减小,因此是递归实现的竞争者。但是,一次传输的磁盘不能超过1个。首先,我们如何使用递归传输N-1个磁盘。。另请参见和维基百科页面 递归如下:你知道如何移动1张光盘,假设你知道如何移动n-1张光盘,你如何移动n张光盘 “假设”部分是您的递归:您通过移动9、1和9来移动10张光盘。Recursion 河内塔中的递归,recursion,towers-of-hanoi,Recursion,Towers Of Hanoi,我已经阅读了河内塔的问题陈述和解决方案。该解决方案指出,当您必须将一组N个磁盘从a移动到B时,请使用C作为临时磁盘,并将N-1个磁盘从a转移到C。然后将第N个磁盘从a转移到B,然后将N-1个磁盘从C转移到B。我知道问题的大小已减小,因此是递归实现的竞争者。但是,一次传输的磁盘不能超过1个。首先,我们如何使用递归传输N-1个磁盘。。另请参见和维基百科页面 递归如下:你知道如何移动1张光盘,假设你知道如何移动n-1张光盘,你如何移动n张光盘 “假设”部分是您的递归:您通过移动9、1和9来移动10张光
要移动9张光盘,先移动8张,然后移动1张,再移动8张。
要移动8张光盘…
…
要移动两张光盘,先移动1,然后移动1,再移动1。这是递归步骤。使用将
N
磁盘从A传输到B的相同算法将N
磁盘从A传输到C。如果N
为一,则只需移动单个磁盘即可。(或者,如果N
为零,则不执行任何操作)
在伪代码中:
move(N, A, B):
if (N > 0)
move(N-1, A, C)
move_single_disk(A, B)
move(N-1, C, B)
有关更多详细信息,请参阅。以与传输
N
磁盘相同的方式递归传输N
磁盘。当你进入一个磁盘时,传输是微不足道的。@ SrimaKutula:如果你用C++来标记这个问题,请添加一些源代码,或者删除标签。@ Paulpro真的吗?很好的解释@布莱安干笑@Srinath Kattula,我们可以执行N-1
传输,通过执行一个磁盘N-1
次的传输。如果这是你要问的。希望不是。