1.传统的递归形式
复杂度非常高,这里就不详细说明了
2.传统的迭代形式
属于动态规划方法,有一些重复的项就不用计算了
3.矩阵的方法
Fn+1=1∗Fn+1∗Fn−1
Fn=1∗Fn+0∗Fn−1
特征方程的方法
化成矩阵的形式
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<algorithm>
using namespace std;
struct Matrix{
int a[2][2];
};
Matrix operator*(Matrix a,Matrix b) //重载*运算符
{
Matrix m;
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
{
m.a[i][j]=0;
for(int k=0;k<2;k++)
{
m.a[i][j]+=a.a[i][k]*b.a[k][j];
}
}
return m;
}
Matrix Mpow(Matrix m,int n) //快速幂求矩阵的的幂
{
Matrix temp,m0;
if(n==1)
temp=m;
else
{
m0=Mpow(m,n/2);
temp=m0*m0;
if(n&1) //因为奇数的二进制的第一位一定是1,所以n&1能够判断其是否为奇数
temp=temp*m;
}
return temp;
}
int main()
{
Matrix m;
m.a[0][0]=1;
m.a[0][1]=1;
m.a[1][0]=1;
m.a[1][1]=0;
Matrix temp;
for(int i=1;i<=7;i++)//测试
{
temp=Mpow(m,i);
cout<<temp.a[0][1]<<endl; //矩阵法求斐波那契数列,矩阵的右上角的那一位即为F_n
}
}