//斐波那契数列
#include <iostream>
using namespace std;
struct matrix
{
//构造函数
matrix
(
long long m00 = 0,
long long m01 = 0,
long long m10 = 0,
long long m11 = 0
):m_00(m00),m_01(m01),m_10(m10),m_11(m11)
{
}
//成员变量
long long m_00;
long long m_01;
long long m_10;
long long m_11;
};
//两个矩阵的乘积
matrix matrixMul(const matrix &m1,const matrix &m2)
{
return
matrix
(
m1.m_00*m2.m_00 + m1.m_01*m2.m_10,
m1.m_00*m2.m_01 + m1.m_01*m2.m_11,
m1.m_10*m2.m_00 + m1.m_11*m2.m_10,
m1.m_10*m2.m_01 + m1.m_11*m2.m_11
);
}
matrix matrixPower(unsigned int n)
{
//assert(n > 0);
matrix m;
if(n == 1)
{
m = matrix(1,1,1,0);
}
else if(n % 2 == 0)
{
m = matrixPower(n/2);
m = matrixMul(m,m);
}
else if(n % 2 == 1)
{
m = matrixPower((n-1)/2);
m = matrixMul(m,m);
m = matrixMul(m,matrix(1,1,1,0));
}
return m;
}
//方法2:递推,为了避免递归中的重复计算,我们可以从小的往大的计算。这样就没有重复的计算了
long long Fibonacci(unsigned int n)
{
int a[2] = {0,1};
if(n < 2)
{
return a[n];
}
long long b = 1;
long long c = 0;
long long z = 0;
for(int i=2; i<=n; ++i)
{
z = b + c;
c = b;
b = z;
}
return z;
}
void main()
{
cout << Fibonacci(7) <<endl;
}
【100题】斐波那契数列(3)-----数学归纳法
最新推荐文章于 2021-11-25 22:29:57 发布