第一种方法:
**思路:**要将n个盘子从1挪到3,中间变量为2,那么首先要将上面的n-1 个盘子从1挪到2,然后将最后一个盘子从1挪到3,如此递归,重复调用函数即可。
代码:
#include<iostream>
using namespace std;
const int disks = 2; //disk表示总层数
void move(int count, int start, int finish, int temp) //移动
{
if (count > 0) { //判断是否已移动完
move(count - 1, start, temp, finish); //递归,调用自身
cout << "Move disk " << count << " from " << start
<< " to " << finish << "." << endl; //打印出当前移动步骤
move(count - 1, temp, finish, start); //递归,调用自身
}
}
int main()
{
move(disks, 1, 3, 2);
}
第二种方法:
思路:要将n个盘子从1挪到3,中间变量为2,那么首先要将上面的n-1 个盘子从1挪到2,然后将最后一个盘子从1挪到3;然后交换1和2,把2当做起始,把1当做中间变量,继续递归,反复调用函数。这种思路可以只一次调用递归。
代码:
#include<iostream>
using namespace std;
const int disks = 2; //表示总层数
void move(int count, int start, int finish, int temp) //移动
{
int swap; //定义变量用来交换
while (count > 0) { // 判断是否已经移动完
move(count - 1, start, temp, finish); //递归
cout << "Move disk " << count << " from " << start
<< " to " << finish << "." << endl; //打印出这一步
count--; // 总层数减1
swap = start;
start = temp;
temp = swap; //交换起始位置与临时位置
}
}
int main()
{
move(disks, 1, 3, 2);
}