// 与原始汉诺塔不同,这里对圆盘的移动做了更多的限制,即每次只允许将圆盘移动到中间柱子上,或从中间柱子上移出,而不允许由第一根柱子直接移动到第三根柱子
// 若移动K个圆盘从第一根柱子到第三根柱子需要F[K]次移动,那么,先移动K-1个圆盘道第三根柱子需要F[K-1]次移动,再将最大的圆盘移动到中间柱子需要1次移动,然后将K-1个圆盘移动回第一根柱子同样需要F[K-1]次移动,移动最大的盘子到第三根柱子需要1次移动,最后将K-1个圆盘也移动到第三根柱子需要F[K-1]次移动,这样递归公式就是F[K]=3*F(K-1)+2。而递归的出口是K=1时,F[1]=2
#include<stdio.h>
#include<string.h>long long F(int num){ // 递归函数,返回值较大使用long long类型
if(num==1) return 2;
else return 3*F(num-1)+2;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
printf("%lld\n",F(n));
}
return 0;
}