您的位置:首页 > 其它

写正确函数需要注意的地方:快速返回斐波那契数的第n项

2012-08-20 17:12 281 查看
void f(int n, int* a)
{
static int A[4]={1,1,1,0};

if(n==1)
return;

f(n/2,a);//计算一半矩阵乘法的结果

int temp[4];
for(int i=0;i<4;i++)
temp[i]=a[i];

for(int i=0;i<2;++i)//获得n/2*2的结果
{
for(int j=0;j<2;++j)
{
a[2*i+j]=0;
for(int k=0;k<2;++k)
a[2*i+j]+=temp[2*i+k]*temp[2*k+j];
}
}

if(n%2!=0)//获得n/2*2+1的结果
{
int temp[4];
for(int i=0;i<4;i++)
temp[i]=a[i];

for(int i=0;i<2;++i)
{
for(int j=0;j<2;++j)
{
a[2*i+j]=0;
for(int k=0;k<2;++k)
a[2*i+j]+=temp[2*i+k]*A[2*k+j];
}
}
}

}

int fib(int n)
{
if(n<1)//参数正确性检查
return -1;
if(n==1 || n==2)
return 1;
else
{
int a[4]={1,1,1,0};
f(n-2,a);
return fib(2)*a[0]+fib(1)*a[2];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐