斐波那契数列c++编程
题目
斐波那契数列c++编程
编写c++程序求斐波那契数列的第n项和前n项和
斐波那契数列也没给出
最后不用递归 效率太低
答案
我给你讲一下思路:
在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
//#include
#include
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
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
最新试题
热门考点
- 古诗赏析
- 在标准状况下,5.6升氢气与5.6升氯气完全反应后,生成的气体被水全部吸收成0.5升溶液,此溶液的物质的...
- 如汽车速度为A千米每小时,步行速度文B千米每小时,则5/A+1/B可以解释为
- 高一数学 试比较用自然语言,列举法和描述法表示集合时,各自的特点和适用对象.希望各位可以帮帮我!
- 初中的完成时,有哪些,该如何用?
- 一物体从静止开始作匀加速直线运动,以T为时间间隔,物体在第二个T时间内位移大小是1.8m.
- 九分之五表示把( )平均分成( )份,表示这样的( );还可以表示把( )平均分成( )份,表示( )份
- 蔚的多音字组词
- 杜牧的《山行》中
- 有4个不同的自然数,它们的平均数是15,三个大数的平均数是16,三个小数的平均数是13,如果第二大的是偶数