关于Hanoi塔的实现
- 首先,在此之前,我们需要了解一下递归这个东西;
在我看来,递归这个东西就是栈的进出;
- 向下:进栈
- 回溯:出栈
在进栈之前标记状态,输入到栈中;
#include<bits/stdc++.h>
using namespace std;
void hanoi(int n,char x,char y,char z){
if(n==1){
cout<<x<<"->"<<z<<endl;
}
else{
hanoi(n-1,x,z,y);
cout<<x<<"->"<<z<<endl;
hanoi(n-1,y,x,z);
}
}
int main(){
int n;
char a='a',b='b',c='c';
cin>>n;
hanoi(n,a,b,c);
return 0;
}
void hanoi(int n,char x,char y,char z){
1 if(n==1){
2 cout<<x<<"->"<<z<<endl;
3 }
4 else{
5 hanoi(n-1,x,z,y);
6 cout<<x<<"->"<<z<<endl;
7 hanoi(n-1,y,x,z);
8 }
}
//解释:进栈的当前状态;
//我这个只是关于3阶hanoi的解释;
1、start:(5行,3,'a','b','c');//n==3;
//n-1,x,z,y:表示的hanoi(n-1,x,z,y);
//同理:hanoi(n-1,y,x,z);
2、两个节点:
n-1,x,z,y:(5行,2,'a','c','b')
n-1,y,x,z:(7行,2,'b','a','c')
3、四个节点
n==1:(1,'a','b','c')
move:(1,'c','a','b')
n1==1:(1,'b','c','a')
move1:(1,'a','b','c')
3
A->C
A->B
C->B
A->C
B->A
B->C
A->C
这个hanoi塔递归是我在b站上找的视频,让我明白了递归的原理,不再只停留在自己用自己;
- 递归就是树的进入与回溯;
- 递归就是进栈与出栈
链接:懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩_bilibili
有错误,请指正;