解法这里就不多说了,CSDN里大佬讲的肯定比我好
这是一道经典的递归题目,自然也非常简单,但是有一个坑却很容易掉下去
误解:
#include<bits/stdc++.h>
using namespace std;
void hanoi(int num,char a,char b,char c){ //起始,终点,过渡
if(num==1){
cout<<a<<"->1->"<<b<<endl;
return;
}
hanoi(num-1,a,c,b);
cout<<a<<"->"<<num<<"->"<<b<<endl;
hanoi(num-1,c,b,a);
}
int main(){
int n=0;
char a,b,c;
cin>>n;
cin>>a>>b>>c;
hanoi(n,a,b,c);
}
正解:
#include<bits/stdc++.h>
using namespace std;
void hanoi(int num,char a,char b,char c){ //起始,终点,过渡
if(num==1){
printf("%c->%d->%c\n",a,num,b);
return;
}
hanoi(num-1,a,c,b);
printf("%c->%d->%c\n",a,num,b);
hanoi(num-1,c,b,a);
}
int main(){
int n=0;
char a,b,c;
cin>>n;
cin>>a>>b>>c;
hanoi(n,a,b,c);
}
观察到有什么区别了吗?
没错,格式化输出(printf)比流输出(cout)要快!!!
这就是超时的主要原因了!