k阶斐波那契数列: 前k-1项为0,第k-1项为1,此后每一项为前k项的和。 当k为1时,斐波那契数列为恒为1的数列。 当k为2时,即位“斐波那契数列”. 以下为真实实现代码
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -1
int Fibonacci(int k,int n);//获取k阶斐波那契数列的第n项
int main(){
printf("%d ",Fibonacci(3,10));//0 1 1 2 3 5 8 13 21 34 55
return 0;
}
int Fibonacci(int k,int n){
if(k<1)//结束小于1则异常
exit(OVERFLOW);//当k=1时恒为1
int *p,x;
p=(int *)malloc(k+1);
if(!p)//初始化失败
exit(OVERFLOW);
int i,j;
for(i=0;i<k+1;i++){//前k-1项为0,第k-1项为1(第k项也为1)
if(i<k-1)
p[i]=0;
else p[i]=1;
}
for(i=k+1;i<n+1;i++){//计算第k项
x=p[0];
for(j=0;j<k;j++)
p[j]=p[j+1];
// printf("x=%d ",x);
p[k]=2*p[k-1]-x;
//printf("x=%d,p[k-1]=%d,p[k]=%d\n",x,p[k-1],p[k]);
// int t;
// for(t=0;t<=k;t++){
// printf("p[%d]=%d ",t,p[t]);
// }
// printf("\n");
}
return p[k];
}
|