Algorithm 河内塔的递推解法 我正在阅读C++的书中的算法。在这里,作者用分而治之的设计和重现来解释河内的塔楼

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个磁

下面的代码是这个问题的递归解决方案。它指定每一步应移动哪个磁盘,以及移动方向(+表示向右移动一个销钉,在最右边的销钉上循环到最左边的销钉;和-表示向左移动一个销钉,在最左边的销钉上循环到最右边的销钉)

我的问题是,当磁盘位于最左边的peg(即peg 1)上时,作者在上面“循环到最左边的peg”是什么意思?我们如何循环到最左边的peg

作者还提到递归基于以下思想:要将N个磁盘向右移动一个peg,我们首先将顶部的N-1个磁盘向左移动一个peg,然后将N-1个磁盘向右移动一个peg,然后再将N-1个磁盘向左移动一个peg(在磁盘N上)

我对上面的左右术语感到困惑。谁能解释一下吗

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