扩展的斐波那契数列:求兔子个数

问题描述:第1年有1对兔子,每对兔子从出生后第3个年起,就可每年生1对兔子,兔子的寿命是6年,问第n年有多少对兔子?

 

公式是
f(1)=1;
f(2)=1;
f(N)=f(N-1)+f(N-2)-g(N-6);
g(N)为第N年出生的兔子,有
g(1)=1;
g(2)=0;
g(N)=f(N-2);
于是有
f(N)=f(N-1)+f(N-2)-f(N-8);
最后的公式为
f(N)= 0 ;(N <-1)
      1;(N==-1)
      0;(N==0)
      1;(N>0&&N <3)
      f(N-1)+f(N-2)-f(N-8);(N>=3)

typedef unsigned long long UINT64;

void Shift(UINT64 *pArr)

{

    for (int i=0;i<5;++i)

    {

        pArr[i]=pArr[i+1];

    }

    pArr[5]=0;

}

UINT64 FibEx(unsigned int n)

{

    UINT64 a=1,b=1;

    UINT64 sum = 1;

    UINT64 pNew[6]={0,0,0,0,1,0};

    for (unsigned int i =3;i<=n;++i)

    {

        UINT64 idead= pNew[0];       

        sum=a+b -pNew[0];

        Shift(pNew);

        pNew[5]=a;

        a=b;

        b=sum;

    }

    return sum;

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值