c语言fibonacci数列问题

想用数组求出结果,但改了很多次都是报错,找不出来问题,哪位大神看一看... 想用数组求出结果,但改了很多次都是报错,找不出来问题,哪位大神看一看 展开
 我来答
小 o
2019-04-25 · 知道合伙人IT服务行家
小 o
知道合伙人IT服务行家
采纳数:11 获赞数:161
深圳市奥斯恩净化技术有限公司 技术负责人 珠海创新人才奖

向TA提问 私信TA
展开全部

该问题属于fibonacci取余的问题

解法如下:

需要注意的是:

1:这道题目,建议用临时变量,没必要用数组存数列,因为题目不关心数列,只关心取余,也无法知道要设置多大的数组合适,设置小了,数组溢出,设置大了,影响内存(特别是像这样定义了这样的大数组data[20000],在之后的找工作,面试是很被动,很容易被刷);

2:为了防止n太大,f(n) 的值导致int存不下,可分步取余(c=(a+b)%10007),然后再加,再取余;

f(n-1)=( f(n-2)+f(n-3) )%10007

f(n-2)=( f(n-3)+f(n-4) )%10007

f(n)=( f(n-1)+f(n-2) )%10007

暗送秋浡365
2019-03-06 · TA获得超过4660个赞
知道大有可为答主
回答量:6401
采纳率:78%
帮助的人:308万
展开全部
显然是3呀:第一项和第二项都是1,所以第三项是2,第四项就是3啦,执行结果也对!不过你的程序有错误:
#include<stdio.h>
long f(int y)
{ if(y= =1|| y= =2)//"=="中间不能有空格
return 1;
else
return f(y-1)+f(y-2);
}
main( )
{ long x,long f(int y);//long x后面应该是“;”而不是“,”,或者说long f(int y);这个生命可以去掉
x=f(4);
printf(“f(4) is %ld\n”,x);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

2019-03-06 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include<stdio.h>
int main()
{int i,n,f[10000]={1,1};
 scanf("%d",&n);
 for(i=2;i<n;i++)
   f[i]=(f[i-1]+f[i-2])%10007;
 printf("%d\n",f[n-1]);
 return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式