DC02-PE32 【题目】已知k阶斐波那契序列的定义为:

来源:互联网 发布:sar指标公式源码java 编辑:程序博客网 时间:2024/06/09 22:49
/**********
题目】已知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];
              }
}
0 0
原创粉丝点击