斐波那契数列c++编程

编写c++程序求斐波那契数列的第n项和前n项和斐波那契数列也没给出最后不用递归效率太低高手帮忙!!... 编写c++程序求斐波那契数列的第n项和前n项和
斐波那契数列也没给出
最后不用递归 效率太低
高手帮忙!!
展开
 我来答
依然特雷西sky
高粉答主

2020-05-16 · 繁杂信息太多,你要学会辨别
知道答主
回答量:1511
采纳率:33%
帮助的人:67.1万
展开全部

1、点击文件选项,选择文件→新建→项目→常规→空项目→输入项目名,鼠标点击确定。

2、右侧解决方案, 点击源文件→添加→新建项→。

3、在名称位置,输入源文件名(特别注意:我们编写的是C文件,故后缀改为.c)。

4、接下来就是编写程序了,如,求斐波那契数列的前40项,具体代码如下。

5、在运行界面的,结果演示如下图(前40项)。 斐波那契数列的应用: 如,跳台阶问题与斐波那契数列很相像。

百度网友ab71244
推荐于2017-12-15 · TA获得超过284个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:0
展开全部
我给你讲一下思路:
在Fibonacci数列中,F[0]=0,F[1]=1,F[n]=F[n-1]+F[n-2](n>=2)。举例来说,Fibonacci数列的前十个数是
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …
我们可以用利用矩阵乘法来计算Fibonacci的第n项 :
|F[n+1] F[n] | = |1 1|.|1 1|.|1 1|...共n个
|F[n] F[n-1] | |1 0| |1 0| |1 0|
用这个方法就可以避免递归了。
我以前写了一个程序,因为为了避免高精度的麻烦,就直接取的是斐波那契数列的后四位。你看看,把它改成高精度就可以了。
#include<iostream>
//#include<cmath>
#include<memory>
using namespace std;
int i,c[10001];
int a[2][2]={{1,1},{1,0}};
int b[2][2];

void trial(int n)
{
if(n==1) return;
else{
if(n%2==1)
{
c[i]=1;i++;trial(n-1);
}
if(n%2==0)
{
c[i]=2;i++;trial(n/2);
}
}
}
void fib(int n)
{
int i,j;
memset(c,0,sizeof(c));
trial(n);
for(i=10000;i>=0;i--)
{
if(c[i]!=0)break;
}
for(j=i;j>=0;j--)
{
if(c[j]==1)
{
b[0][1]=a[0][0]%10000;
b[0][0]=(a[0][0]+a[0][1])%10000;
b[1][1]=a[0][1]%10000;
a[0][1]=b[0][1];
a[0][0]=b[0][0];
a[1][1]=b[1][1];
}
if(c[j]==2)
{
b[0][0]=(a[0][0]*a[0][0]+a[0][1]*a[0][1])%10000;
b[0][1]=(a[0][0]*a[0][1]+a[0][1]*a[1][1])%10000;
b[1][1]=(a[1][1]*a[1][1]+a[0][1]*a[0][1])%10000;
a[0][0]=b[0][0];
a[0][1]=b[0][1];
a[1][1]=b[1][1];
}
}
}
int main()
{
int N;
cin>>N;
if(N==0){cout<<"0";return 0;}
fib(N);
cout<<a[0][1];
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nicky_zs
2008-11-23 · TA获得超过654个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:409万
展开全部
斐波那契数列就是 0 1 1 2 3 5 8 13 21 ...
除了最开始的0和1,后面每一个数都是前面两个数相加之和。
不用递归就用循环啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
betawhh
2008-11-23
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
#include<cmath>
#include<cstdio>
double f,n;
int main(){
scanf("%lf",&n);
printf("%.0lf\n",1/sqrt(5)*(pow(((sqrt(5)+1)/2),n)+pow(((sqrt(5)-1)/2),n)));
printf("%.0lf\n",1/sqrt(5)*(pow(((sqrt(5)+1)/2),n+2)+pow(((sqrt(5)-1)/2),n+2))-1);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dragon_worlds
2008-11-23 · 超过11用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
真服了你,递归也做得到n的时间复杂度的啊
很多东西用递归解决容易,用其他方法麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式