【杭电oj】2047 - 阿牛的EOF牛肉串(递归)

阿牛的EOF牛肉串

题目链接: 点击查看



这是一道典型的递归问题,递归是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,所以说解决递归问题的关键在于找到所谓的最简问题。

本题中:
设对于n个字符的解决方案为M(n)。
1.最后一位不是‘o’时:
对前n-1个字符没有要求(前者自然符合无“o-o”对的要求),最后一个字符有两种选择,则共有 : 2*M(n-1)
2.最后一位是‘o’时:
第n-1个字符不能是‘o’,则有2*M(n-2)
共计: 2*[M(n-1)+M(n-2)]种。
AC代码

#include

int main(){
    int n;
    long long a[45];
    a[1] = 3;a[2] = 8;
    for(int i=3;i<45;i++){
        a[i] = 2*(a[i-2]+a[i-1]);
    }
    while(~scanf("%d",&n)){
        printf("%lld\n",a[n]);
    }
    return 0;
}

技巧:使用数组将每个n所对应的值储存起来,在调用的时候更节省时间。

你可能感兴趣的:(递归,杭电oj)