汉诺塔问题(分治递归思想)

匿名 (未验证) 提交于 2019-12-02 23:56:01

汉诺塔的基本思想就是
1.先把上面n-1个通过c转移到b(因为我的c里面要放n,也就是最大的那个)
2.把a中的 n(最大的那个)移动到c
3.再把b中的n-1个通过a移动到c;

整个过程就结束了,然后递归调用这个函数,每一层递归都执行这三个步骤
最后n=1的时候,想象一下,n=1的时候,是不是把c中的1直接移到c中即可,所以这就是终止条件。今天可算是理解了汉诺塔的原理了!!!`
``
#include
using namespace std;

void movef(int n,char a,char b){
cout<<“把”<<n<<“从”<<a<<“移动到”<<b<<endl;
}

void haniod(int n,char a,char b,char c){
if(n==1){
movef(n,a,c);
}else{
haniod(n-1,a,c,b);
movef(n,a,c);
haniod(n-1,b,a,c);
}
}
int main(){
int n;
cin>>n;
haniod(n,‘a’,‘b’,‘c’);
}

 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!