解题思路: 直接使用递归会超时,参考缓存原理,已经计算过的年份保存下来,下次用到的话直接使用缓存,没计算过的再计算
只需要用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 人评分