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

/**********
题目】已知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];
              }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值