下面是C++中经典的递归算法实现汉诺塔问题:
#include <iostream>
using namespace std;
void move(int n, char from, char to, char temp)
{
if(n == 1)
{
cout << "move disk 1 from " << from << " to " << to << endl;
}
else
{
move(n - 1, from, temp, to);
cout << "move disk " << n << " from " << from << " to " << to << endl;
move(n - 1, temp, to, from);
}
}
int main()
{
int n = 3;
move(n, 'A', 'C', 'B');
return 0;
}
以上代码中,move函数用于移动汉诺塔的盘子,其中n为盘子的数目,from表示原柱,to表示目标柱,temp表示中间柱。当只有一个盘子时,直接从from柱移动到to柱即可,当有多个盘子时,先把上面的n-1个盘子从from柱经由to柱移动到temp柱,再把最后一个盘子从from柱移动到to柱,最后再把n-1个盘子从temp柱经由from柱移动到to柱。