这个问题,大一困扰我很长时间,我总结一下
分析:
循环三个动作
当 n==1时候,将n从 x------>z;
n>1时候 我们需要将n-1 借助z 搬到y,再将n由x搬到z,再将n-1由y借助z搬到x
#include<iostream> using namespace std; void gcd(int n,char a,char b,char c){ if(n==1) cout<<n<<" "<<a<<" to "<<c<<endl; else { gcd(n-1,a,c,b) ; cout<<n<<" "<<a<<" to "<<c<<endl; gcd(n-1,b,a,c); } } int main() { int n; cin>>n; gcd(n,'A','B','C'); }
2^n-1次操作后全部结束,每一步都有后面的递归