斐波拉契数列算法

题目:

已知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 */

k阶斐波那契序列的性质有:

            1、k为大于等于2的整数;

            2、前k-1个数为0;

            3、第k个数为1;

            4、从第k+1个数起,每个数都是其前k个数之和。

  //参数错误
  if(m<0||k<2)
      return ERROR;
      
  if(m<k)
  {
    if(m==k-1)
      f=1;
    else 
      f=0;
      return OK;
  }
  
  //创建指针并申请一段内存
  int *result;
  result=(int*)malloc((m+1)*sizeof(int));
  
  //前K-1个数为0,即到k-2
  for(int i=0;i<k-1;i++)
      result[i]=0;
  result[k-1]=1;//第k项为1
  result[k]=1;//v[k+1]=v[k]+v[k-1]=1
  

  for(int i=k+1;i<=m;i++)
  {
    result[i]=2*result[i-1]-result[i-k-1];
  }
      f=result[m];
      
      return OK;

最后的for循环体:

①:f(m)=f(m-1)+f(m-2)+…+f(m-k) 
②:f(m-1)=f(m-2)+f(m-3)+…+f(m-k-1)              
①-②: f(m)-f(m-1)=f(m-1)-f(m-k-1)                  
f(m)=2f(m-1)-f(m-k-1) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值