汉诺塔问题还能怎么办,肯定得递归了,但简单,清晰,效率,高能,才是我们实现的重中之重,接下来通过很简单的递归算法实现它:
首先,不妨设置是那个柱子为A,B,C,在函数中,我们用x,y,z表示引入:
int hannuota(int n,char x,char y,char z);
写出执行函数:
int hannuota(int n,char x,char y,char z){
if(n==1){
cout<<"A"<<"-->"<<"C"<<endl;
cnt+=1;
}
else{
hannuota(n-1,'A','C','B');
cout<<x<<"-->"<<z<<endl;
cnt+=1;
hannuota(n-1,'B','A','C');
}
return cnt;
}
利用全局变量实现计数:
int cnt=0;//写在头部位置作静态变量
输入汉诺塔个数:
int n;
cin>>n;
整合算法实现:
#include<iostream>
using namespace std;
int hannuota(int n,char x,char y,char z);
int cnt=0;
int main(){
int n;
cin>>n;
cout<<hannuota(n,'A','B','C');
}
int hannuota(int n,char x,char y,char z){
if(n==1){
cout<<"A"<<"-->"<<"C"<<endl;
cnt+=1;
}
else{
hannuota(n-1,'A','C','B');
cout<<x<<"-->"<<z<<endl;
cnt+=1;
hannuota(n-1,'B','A','C');
}
return cnt;
}
其实就是这样,这套算法干净利索,不拖泥带水,我想这大抵是已经最简单的算法实现了!
执行函数还得很值得一看的!
虽然看着简洁,运行却很是麻烦,不断进栈出栈,所幸不是我们操作!