Algorithm 河内塔的递推解法 我正在阅读C++的书中的算法。在这里,作者用分而治之的设计和重现来解释河内的塔楼
下面的代码是这个问题的递归解决方案。它指定每一步应移动哪个磁盘,以及移动方向(+表示向右移动一个销钉,在最右边的销钉上循环到最左边的销钉;和-表示向左移动一个销钉,在最左边的销钉上循环到最右边的销钉) 我的问题是,当磁盘位于最左边的peg(即peg 1)上时,作者在上面“循环到最左边的peg”是什么意思?我们如何循环到最左边的peg 作者还提到递归基于以下思想:要将N个磁盘向右移动一个peg,我们首先将顶部的N-1个磁盘向左移动一个peg,然后将N-1个磁盘向右移动一个peg,然后再将N-1个磁盘向左移动一个peg(在磁盘N上) 我对上面的左右术语感到困惑。谁能解释一下吗Algorithm 河内塔的递推解法 我正在阅读C++的书中的算法。在这里,作者用分而治之的设计和重现来解释河内的塔楼,algorithm,towers-of-hanoi,Algorithm,Towers Of Hanoi,下面的代码是这个问题的递归解决方案。它指定每一步应移动哪个磁盘,以及移动方向(+表示向右移动一个销钉,在最右边的销钉上循环到最左边的销钉;和-表示向左移动一个销钉,在最左边的销钉上循环到最右边的销钉) 我的问题是,当磁盘位于最左边的peg(即peg 1)上时,作者在上面“循环到最左边的peg”是什么意思?我们如何循环到最左边的peg 作者还提到递归基于以下思想:要将N个磁盘向右移动一个peg,我们首先将顶部的N-1个磁盘向左移动一个peg,然后将N-1个磁盘向右移动一个peg,然后再将N-1个磁
void hanoi(int N, int d)
{
if (N == 0) return;
hanoi(N-1, -d);
shift(N, d);
hanoi(N-1, -d);
}
它只是意味着:
向右骑自行车:
peg1 -> peg2
peg2 -> peg3
peg3 -> peg1
向左骑自行车
peg1 -> peg3
peg2 -> peg1
peg3 -> peg2
peg1 -> peg3
peg2 -> peg1
peg3 -> peg2