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

来源:互联网 发布:如何提升淘宝信誉评级 编辑:程序博客网 时间:2024/06/01 09:23
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];}}