题目:已知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 */
答案仅供参考:
Status Fibonacci(int k, int m, int &f) {
// Add your code here
//错误检查
if(k<2||m<0) {
return ERROR;
} else if(m<k-1) {
f = 0;
return OK;
} else {
int i=1,stand;
//保存和记录所需的第n项前k个有效值(0不保存)
int *keep = (int *)malloc(sizeof(k));
*(keep) = 1;
for(int tip=0;tip<m-k;tip++) {
long all = 0;
if(i<k) {
stand = i;
} else {
stand = k;
}
for(int j=0;j<stand;j++) {
all += *(keep+j);
}
*(keep+(i%k))=all;
i++;
}
i--;
//因为未保存0,所以需要排除空项;
if(i<k) {
stand = i;
} else {
stand = k-1;
}
f = 0;
//写入结果
while(stand>=0) {
f += *(keep+stand);
stand--;
}
free(keep);
return OK;
}
}