Fibonacci数的矩阵实现和线性递增实现

来源:互联网 发布:简单后期软件 编辑:程序博客网 时间:2024/05/18 00:42

矩阵实现,时间复杂度为(lgn)

void feng(int a2,int a1,int a0,int b2,int b1,int b0,int& c2,int& c1,int& c0){c2 = a2*b2+a1*b1;c1 = a2*b1+a1*b0;c0 = a1*b1+a0*b0;}void getfib(int n,int& c2,int& c1,int& c0){if(n<2){c2 = 1;c1 = 1;c0 = 0;return;}int i =n/2;getfib(i,c2,c1,c0);feng(c2,c1,c0,c2,c1,c0,c2,c1,c0);if(0 != n%2){feng(c2,c1,c0,1,1,0,c2,c1,c0);}}int GetFibonacciNumber(int n){if(0==n) return 0;int a,b,c;getfib(n,a,b,c);return b;}


线程递增实现,时间复杂度为(n)

int GetFibonacciNumber(int n){int a = 0;int b = 1;for(int i = 2;i<=n;i=i+2){a = a+b;b = a+b;}return 0 == n%2 ? a:b;}

0 0
原创粉丝点击