试利用循环队列编写求 k 阶斐波那契序列中前 n+1 项(f0,f1,......fn)的算法, 要求满足fn≤max且fn+1>max, 其中 max 为某个约定的常数。 循环队列的容量为 k, 因此, 在算法执行结束时, 留在循环队列中的元素应是所求 k 阶斐波那契序列中的最后 k 项fn-k+1,......fn。
void GetFib(int k,int n)
{
InitQueue(Q) ;
for(i=0;i<k-1;i++)
Q.base[i]=0;
Q.base[k-1]=1;
for(i=0;i<k;i++)
printf(“%d”,Q.base[i]) ;
for(i=k;i<=n;i++)
{
m=i%k;
sum=0;
for(j=0;j<k;j++)
sum+=Q.base[(m+j)%k];
Q.base[m]=sum;
printf(“%d”,sum) ;
}
}