题目
描述
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
输入
输入int型表示month
输出
输出兔子总数int型
样例输入
9
样例输出
34
思路
斐波那契数列。。。
第一个月 1对兔子
第二个月 1对兔子
第三个月 2对兔子
第四个月 3对兔子
。。。。
代码
#include <iostream>
using namespace std;
int Facbonali(int num)
{
if(num==0)
{
return 0;
}
else if(num==1)
{
return 1;
}
else
{
return Facbonali(num-1)+Facbonali(num-2);
}
}
int main()
{
int N;
cin>>N;
cout<<Facbonali(N)<<endl;
}
说到斐波那契数列
Fibonacci数列定义为:f(n) = f(n-1) + f(n-2), f(0) = 0, f(1) = 1;问题:输入n,请给出求f(n)的时间复杂度不超过O(logn)的算法。
首先,我们构造两个向量v1=(f(n+1), f(n))和v2=(f(n+2), f(n+1)),根据Fibonacci
数列性质,我们可以得到从v1到v2的递推变换矩阵:
[f(n+2