#递归
题意
- n层汉诺塔,从a柱移到c柱,每次移动只能向相邻的移动,求解所需要的步数
思路
- 设计递归函数:对于当前这一片,把它从a移动到c需要先把它上面的移动到c,然后再把它移动到b,再把c上的所有移动到a,再把自己移动到c,然后移过来
- 其中只有移动自己的部分需要记录步数
- 观察发现
代码
#include<bits/stdc++.h>
using namespace std;
int cnt;
void han(int n,int f,int t){
if(n==0) return ;
han(n-1,0,2);
cnt++;
han(n-1,2,0);
cnt++;
han(n-1,0,2);
}
int main(){
int n;
while(cin >> n){
cnt=0;
han(n,0,2);
cout << cnt << endl;
}
return 0;
}
// int main(){
// int n;
// while(cin >> n){
// cout << pow(3,n)-1 << endl;
// }
// return 0;
// }