问题描述:第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;
}