csu 1087 斐波那契数列

本文探讨了通过递归方法计算斐波那契数列的问题,遇到的测试数据限制和解决方案,以及为了提高效率而进行的优化。包括使用常量表缓存结果和调整代码以应对可能的更大输入。通过实例展示了编程中面对边界条件和性能优化时的思考过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

晕,题目上描述是 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);
}
}



转载于:https://www.cnblogs.com/JMDWQ/archive/2012/03/06/2381399.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值