汉诺塔问题 求助
盲盒,非粘贴。请分析一下我这个思路,做出更正。
// 汉诺塔
#include <iostream>
#include <cstring>
using namespace std;
void move(int s , char a , char b , char c){
if (s==1) return;
cout<<a<<"--"<<b<<endl;
move(s-1,a,c,b);
cout<<a<<"--"<<c<<endl;
}
int main(){
int n=4;
move(n,'a','b','c');// 4层盘,从a杆开始,以b杆为中介,移动到c杆
return 0;
} // 汉诺塔
#include <iostream>
#include <cstring>
using namespace std;
void move(int s, char a, char b, char c) {
if (s == 1) { cout << a << "--" << c << endl; return; }
move(s - 1, a, c, b); // 把n-1的圆环从a移动到b,递归调用下一层就是把a移动到c
cout << a << "--" << c << endl;
move(s - 1, b, a, c); //把n-1的圆环从b移动到c
}
int main() {
int n = 4;
move(n, 'a', 'b', 'c');// 4层盘,从a杆开始,以b杆为中介,移动到c杆
return 0;
} 正纠结:是用两个打印输出,还是用两个调用? cnkizy 发表于 2022-9-16 15:58
感谢。
仔细阅读。
想问一下,这个s在递归里,默认是传址操作,还是传值操作?
0次进去,碰到自己,翻倍 2次掉用;没有出来,还碰到自己:
0 1进去 的 成了 4次
0+ 1 =2把2次翻倍了8次 再进 16 再进 32 此时,开始打印+return
眼看的,没有敲,话说这,真烧脑.
你搞个结果看看.
你的思路是不清晰的
我的对汉诺塔的理解是建立两种模型
第一种,只有一个盘,解题步骤就是从a-->c
第二种:只有两个盘,把从1-(n-1)个盘看成一个整体,记为盘1,第n个盘记为盘2
解题步骤就是
1、把盘1从a-->b
2、盘2从a-->c
3、盘1从b-->c
完成
希望对你有所帮助 感谢。理解了一些。
页:
[1]