晕,题目上描述是 N<=20,但是建个20大小的表,提交是WA,用递归提价一下AC了。
猜测是为了练习,不让大家偷懒。。
猜测测试数据最大的是21。。
为了偷懒,建了个25大小的表(注释部分),一提交果然AC,彻底晕倒了,要卡的话应该给个稍大一点的啊。。
当然如果特别大,时间限制也要改大一点,谅解了。。。
/* 1087: 斐波那契数列 */
//用递归法计算第N个斐波那契数,并输出所用到的递归次数
//斐波那契数列排列如下:1,1,2,3,5,8,……
# include <stdio.h>
int fun(int n, int *cnt);
//const int f[] = {0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,
// 10946,17711,28657,46368,75025,121393,196418,317811,514229,832040};
//const int c[] = {0,1,1,3,5,9,15,25,41,67,109,177,287,465,753,1219,1973,3193,5167,8361,13529,
// 21891,35421,57313,92735,150049,242785,392835,635621,1028457,1664079};
int main()
{
int i;
int f, cnt;
// while (~scanf("%d", &i))
// printf("%d %d\n", f[i], c[i]);
// for (i = 21; i <= 30; ++i)
while (~scanf("%d", &i))
{
cnt = 0;
f = fun(i, &cnt),
printf("%d %d\n", f, cnt);
}
return 0;
}
int fun(int n, int *cnt)
{
if (n==1 || n==2)
{
++(*cnt);
return 1;
}
else
{
++(*cnt);
return fun(n-1, cnt) + fun(n-2, cnt);
}
}