软件工程221班金航


私信TA

用户名:uq_14600592801

访问量:959

签 名:

这个人不懒,这不是签名吗~

等  级
排  名 9122
经  验 1121
参赛次数 0
文章发表 11
年  龄 19
在职情况 学生
学  校 广西科技师范学院
专  业 软件工程

  自我简介:

从不熬夜只通宵

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

只需要用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分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区