广工数据结构第一单元科波拉契数列

题目:已知k阶科波拉契定义为:f(0)=0, f(1)=0, …, f(k-2)=0, f(k-1)=1;
f(n)=f(n-1)+f(n-2)+…+f(n-k), n=k,k+1,…
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

要求实现下列函数:
Status Fibonacci(int k, int m, int &f);
/* 如果能求得k阶斐波那契序列的第m项的值f,则返回OK;/
/
否则(比如,参数k和m不合理)返回ERROR */

答案仅供参考:

Status Fibonacci(int k, int m, int &f) { 
    // Add your code here
    //错误检查
  if(k<2||m<0) {
    return ERROR;
  } else if(m<k-1) {
    f = 0;
    return OK;
  } else {
    int i=1,stand;
    //保存和记录所需的第n项前k个有效值(0不保存)
    int *keep = (int *)malloc(sizeof(k));
    *(keep) = 1;
    for(int tip=0;tip<m-k;tip++) {
      long all = 0;
      if(i<k) {
        stand = i;
      } else {
        stand = k;
      }
      for(int j=0;j<stand;j++) {
        all += *(keep+j);
      }
      *(keep+(i%k))=all;
      i++;
    }
    i--;
    //因为未保存0,所以需要排除空项;
    if(i<k) {
      stand = i;
    } else {
      stand = k-1;
    }
    f = 0;
    //写入结果
    while(stand>=0) {
      f += *(keep+stand);
      stand--;
    }
    free(keep);
    return OK;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

舔猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值