已知k阶裴波那契序列的定义为
f0=0, f1=0, ..., fk-2=0, fk-1=1;
fn=fn-1+fn-2+...+fn-k, n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,
k和m均以值调用的形式在函数参数表中出现。
f0=0, f1=0, ..., fk-2=0, fk-1=1;
fn=fn-1+fn-2+...+fn-k, n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,
k和m均以值调用的形式在函数参数表中出现。
以下为实现的函数:
Status Fibonacci(int k, int m, int &f)
/* 求k阶斐波那契序列的第m项的值f */
{
int sum,i,j,e[100];
if(k < 2||m < 0) return ERROR; /**异常处理**/
/**
根据k阶斐波那契序列的定义:
K阶斐波那契数列的前K-1项均为0,
第k项为1,以后的每一项都是前K项的和
**/
if(m < k-1)
f = 0;
else if(m == k-1)
f = 1;
else{
for(i = 0;i < k-1;i++)
e[i] = 0; //K阶斐波那契数列的前K-1项均为0
e[k-1] = 1; //第k项为1
for(i = k;i <= m;i++){
sum = 0;
for(j = i-k;j <= i;j++)//以后的每一项都是前k项的和
sum += e[j];
e[i] = sum; //将以后的每一项的值存进数组e中
}
f = e[m]; //求k阶斐波那契序列的第m项的值f
}
return OK;
}
总结:一开始无从下手,后来根据根据k阶斐波那契序列的定义:K阶斐波那契数列的前K-1项均为0, 第k项为1,以后的每一项都是前K项的和,再以2阶斐波那契序列为例(0、1、1、2、3、5、8、13、21、……)以此类推,将k阶实现。