/**********
【 题目】已知k阶斐波那契序列的定义为:
f0=0, f1=0, …, fk-2=0, fk-1=1;
fn=fn-1+fn-2+…+fn-k, n=k,k+1,…
试利用循环队列编写求k阶斐波那契序列中第
n+1项fn的算法。
本题的循环队列的类型定义如下:
typedef struct {
ElemType *base; // 存储空间的基址
int front; // 队头位标
int rear; // 队尾位标,指示队尾元素的下一位置
int maxSize; // 最大长度
} SqQueue;
**********/
long Fib(int k, int n)
/* 求k阶斐波那契序列的第n+1项fn */
{
int i,j,sum;
SqQueue Q;
if(n<k-1)
return 0;
else if(k-1==n)
return 1;
Q.base[Q.rear]=0;
Q.rear=(Q.rear+1)%Q.maxSize;
}
Q.base[Q.rear]=1;
Q.rear=(Q.rear+1)%Q.maxSize;
for(i=k;i<=n;i++){
sum=0;
for(j=0;j<k;j++){
sum+=Q.base[(Q.rear+Q.maxSize-1-j)%Q.maxSize];
}
Q.base[Q.rear]=sum;
Q.rear =(Q.rear+1)%Q.maxSize;
}
return Q.base[(Q.rear+Q.maxSize-1)%Q.maxSize];
}
}
【 题目】已知k阶斐波那契序列的定义为:
f0=0, f1=0, …, fk-2=0, fk-1=1;
fn=fn-1+fn-2+…+fn-k, n=k,k+1,…
试利用循环队列编写求k阶斐波那契序列中第
n+1项fn的算法。
本题的循环队列的类型定义如下:
typedef struct {
ElemType *base; // 存储空间的基址
int front; // 队头位标
int rear; // 队尾位标,指示队尾元素的下一位置
int maxSize; // 最大长度
} SqQueue;
**********/
long Fib(int k, int n)
/* 求k阶斐波那契序列的第n+1项fn */
{
int i,j,sum;
SqQueue Q;
if(n<k-1)
return 0;
else if(k-1==n)
return 1;
else{
InitQueue_Sq(Q,n+2);
for(i=0;i<k-1;i++){Q.base[Q.rear]=0;
Q.rear=(Q.rear+1)%Q.maxSize;
}
Q.base[Q.rear]=1;
Q.rear=(Q.rear+1)%Q.maxSize;
for(i=k;i<=n;i++){
sum=0;
for(j=0;j<k;j++){
sum+=Q.base[(Q.rear+Q.maxSize-1-j)%Q.maxSize];
}
Q.base[Q.rear]=sum;
Q.rear =(Q.rear+1)%Q.maxSize;
}
return Q.base[(Q.rear+Q.maxSize-1)%Q.maxSize];
}
}