使用递归算法求Fibonacci数列的第n项,第一项是1,第二项是1,第n项是前两项之和

#include"stdafx.h"#include<stdio.h>intF(intn){if(n=0)return1;elseif(n=1)return1;elser... #include "stdafx.h"
#include <stdio.h>
int F(int n)
{
if(n=0) return 1;
else if(n=1) return 1;
else return (F(n-1)+F(n-2));
}
int main(int argc, char* argv[])
{
int n;
scanf("%d",&n);
printf("%d",F(n));
return 0;
}
哪里错了?,我输n多少,都显示1
展开
 我来答
帐号已注销
2018-09-16 · TA获得超过489个赞
知道小有建树答主
回答量:791
采纳率:66%
帮助的人:153万
展开全部
int F(int n)

{
if(n==1||!n)

return 1;

else

return F(n-1)+F(n-2);

}
比较大小是用==,,n=1是先将n赋值为1再判断n是否不为0
n==0可简写为!n,||是逻辑运算符“或”
其实上面的程序是指数时间复杂度,下面程序则是线性时间复杂度的:
int F(int n)
{
int a=1,b=1;

for(int i=2;i<=n;i++)

{

int c=a+b;

a=b;

b=c;

}

return b;

}
其实还有一种方法,是利用二维矩阵{1 1}{1 0}的幂实现的,对数时间复杂度。如果感兴趣可以查一下,网上资料很多的。由于代码太长,我这里就不写出来了
kaixingui2012
推荐于2016-12-01 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6136万
展开全部
int F(int n)
{
if(n==0) //比较用==
return 1;
    else if(n==1) //比较用==
return 1;
else
return (F(n-1)+F(n-2));
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
熊雨筠70617
2019-12-04
知道答主
回答量:1
采纳率:0%
帮助的人:652
展开全部

#include <stdio.h>
int sum(int j);
int j;
int main()
{
printf("请输入斐波那契数列的项数(最大为第57项):\n");
scanf_s("%d", &j);
if (j == 1 || j == 2)
{
printf("第%d项的值为1",j);
}
else
{
sum(j);
}
return 0;
}
int sum(int j)
{
int i,a=1,b=1;
for (i = 3; i <= j; i++)
{
if (i % 2 == 1)
{
a = a + b;
}
else if (i % 2 == 0)
{
b = a + b;
}
}
if (j % 2 == 1)
{
printf("第%d项的值为%d", j, a);
}
else if (j % 2 == 0)
{
printf("第%d项的值为%d", j, b);
}
}


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式