分享学习心得
这里以两个盘子为例子
目标是
1号盘子由左到右
2号盘子由左到中
1号盘子由右到中
在学习中主要难懂的是代码的ht(n-1,x,z,y)
这里标注下ht(n-1,x(左),z(右),y(中)),所以为什么这么换呢?因为以下代码
cout <<"移动"<< n << "号圆盘:由" << x << "柱子,到" << y << "柱子上。" << endl;
一直是由x到y,即输出前两个参数
所以第一次ht(n-1,x(左),z(右),y(中))的意思就是1号盘子由左到右
同理第二次ht(n - 1, z, y, x); 的意识是1号盘子由z到y(由右到中)
#include <iostream> #include <vector> #include <string> using namespace std; int c = 0; void ht(int n ,string x,string y,string z) { if (n == 1) { cout <<"移动"<< n << "号圆盘:由" << x << "柱子,到" << y << "柱子上。" << endl; c++; } else { ht(n - 1, x, z, y); cout << "移动" << n << "号圆盘:由" << x << "柱子,到" << y << "柱子上。" << endl; c++; ht(n - 1, z, y, x); } } int main() { string x, y, z; int t = 0; cout << "请输入要移动的圆盘总数:"; cin >> t; cout << "请输入三根柱子的名称:"; cin >> x >> y >> z; cout << endl; ht(t, x,y,z); cout << endl; cout << "全部" << t << "个圆盘,由" << x << "柱子移动到" << z << "柱子,共移动了" <<c<<"次!" << endl; }
最后记录下,递归的两个函数只是恰好相同