题目:
已知k阶裴波那契序列的定义为
f(0)=0, f(1)=0, …, f(k-2)=0, f(k-1)=1;
f(n)=f(n-1)+f(n-2)+…+f(n-k), n=k,k+1,…
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。
要求实现下列函数:
Status Fibonacci(int k, int m, int &f);
/* 如果能求得k阶斐波那契序列的第m项的值f,则返回OK;/
/ 否则(比如,参数k和m不合理)返回ERROR */
k阶斐波那契序列的性质有:
1、k为大于等于2的整数;
2、前k-1个数为0;
3、第k个数为1;
4、从第k+1个数起,每个数都是其前k个数之和。
//参数错误 if(m<0||k<2) return ERROR; if(m<k) { if(m==k-1) f=1; else f=0; return OK; } //创建指针并申请一段内存 int *result; result=(int*)malloc((m+1)*sizeof(int)); //前K-1个数为0,即到k-2 for(int i=0;i<k-1;i++) result[i]=0; result[k-1]=1;//第k项为1 result[k]=1;//v[k+1]=v[k]+v[k-1]=1 for(int i=k+1;i<=m;i++) { result[i]=2*result[i-1]-result[i-k-1]; } f=result[m]; return OK;
最后的for循环体:
①:f(m)=f(m-1)+f(m-2)+…+f(m-k)
②:f(m-1)=f(m-2)+f(m-3)+…+f(m-k-1)
①-②: f(m)-f(m-1)=f(m-1)-f(m-k-1)
f(m)=2f(m-1)-f(m-k-1)