题目1458:汉诺塔III

来源:互联网 发布:淘宝不清洗订单会怎样 编辑:程序博客网 时间:2024/06/10 03:35

// 与原始汉诺塔不同,这里对圆盘的移动做了更多的限制,即每次只允许将圆盘移动到中间柱子上,或从中间柱子上移出,而不允许由第一根柱子直接移动到第三根柱子

 // 若移动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;    
}
0 0
原创粉丝点击