第一種方法:
**思路:**要將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);
}