【OJ练习】Fibonacci数列的计算和转换

介绍:

一、Fibonacci数列:

1,1,2,3,5,8,13,15,28,…

它们有这样的规律:第1和第2的数字都是1,第3个数字是前2个数字之和,第4个数字是第2,第3个数字之和。

Fn = F(n-1) + F(n-2).

二、扩展Fibonacci数列:

扩展Fibonacci数列,前2个数字可以任意输入,例如前2个数字为-1,1,那么后续的数字就是:0,1,1,2,3,5,8,…

题目要求:

一、请实现如下函数功能:输入扩展Fibanacci数列的前2个数字和要求的数字序号,返回这个序号对应的扩展Fibanbacci数值。例如,扩展Fibanacci的前2个数字为-11

输入3,则返回0

输入6,则返回2

输入10,则返回13

题目要求可以输入30以内的数字,都能返回结果。请实现函数

int GetExtFibonacci(int first , int second, int num)

二、计算前n个序列之和。

例如,扩展Fibonacci数列的前2个数字是-11,则该数列为:

-1,1,0,1,1,2,3,5,8,13…

则前2个数字之和是:-1 + 1 = 0

则前3个数字之和是:-1 + 1 + 0 = 0

则前5个数字之和是:-1 + 1 + 0 + 1= 1

请实现函数:

int CalcTotalValueOfExtFibonacci(int first , int second, int num)

 

 

 

 

/************************************************************************/

/*  GetExtFibonacci                                                         */

/*  输入扩展Fibonacci数列的前2个数字firstsecond,要得到的数字的序列号num  */

/*  输入:扩展Fibonacci数列对应的序号的数字                                 */

/************************************************************************/

int GetExtFibonacci(int first , int second, int num)

{

       int pre_pre_num=first;

       int pre_num=second;

       int now_num,i;

 

       if( num == 1)

              return pre_pre_num;

       else if ( num == 2 )

              return pre_num;

 

       for(i=1;i<=num-2;i++)

       {

              now_num=pre_pre_num+pre_num;

              pre_pre_num=pre_num;

              pre_num = now_num;

       }    

       return now_num;

}

 

/************************************************************************/

/*  CalcTotalValueOfExtFibonacci                                        */

/*  输入扩展Fibonacci数列的前2个数字firstsecond,和数字的序列号num    */

/*  输出:扩展Fibonacci数列对应的序号的数列之前(包括这个数列本身)的所有的数列之和         */

/************************************************************************/

int CalcTotalValueOfExtFibonacci(int first , int second, int num)

{

    int pre_pre_num=first;

       int pre_num=second;

       int now_num,i,sum =0 ;

 

       if( num == 1)

              sum = pre_pre_num;

       else if ( num == 2 )

              sum = pre_pre_num + pre_num;

 

       for(i=1;i<=num-2;i++)

       {

              now_num=pre_pre_num+pre_num;

              pre_pre_num=pre_num;

              pre_num = now_num;

              sum += now_num;

       }    

       return sum;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值