解题思路:    直接使用递归会超时,参考缓存原理,已经计算过的年份保存下来,下次用到的话直接使用缓存,没计算过的再计算

只需要用if判断就可以

注意事项:

参考代码:

#include"stdio.h" 


int  YEAR[60]={};        //定义数组,用来缓存计算过的数据


int _both(int year)    //递归函数

{

    int a=0,b=0;        

    if(year<4) return year; 

    {

        if(YEAR[year-1]) a=YEAR[year-1];    //数组初值是0,如果保存过就是非0,直接使用

        else                                             //没保存过的话,就递归一次计算

        {

            a=_both(year-1);

            YEAR[year-1]=a;                        //计算后保存在对应年份

        }

        if(YEAR[year-3]) b=YEAR[year-3];        //year-3同理

        else 

        {

            b=_both(year-3);

            YEAR[year-3]=b;

        }

    return a+b;                    //最后把-1和-3年返回

    }


}


void main()

{

int year=0;

while(scanf("%d",&year)!=EOF&&year) printf("%d\n",_both(year));

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论