斐波那契数列的c++实现,以及求和数列实现
来源:互联网 发布:数据库整型 编辑:程序博客网 时间:2024/05/20 10:15
一、迭代算法,复杂度是n
这里仍然要注意一个问题,有些人会简单的用数组存储斐波那契数列,而不是用三个数转换。估计是要占用不少内存空间的,空间复杂度虽然没有原来要求那么高,还是要注意一下的。
#include <iostream>using namespace std;long Function_one(long n){ if (n <= 0)return 1; //0和1 long current = 1; //大于1 long last = 1; long beforelast = 0; for (long i = 2; i <= n; i++) { current = last + beforelast; beforelast = last; //下次循环的第n-2项 last = current; //下次循环的n-1项 } return current;}long Function_two(long n){ long sum = 0; for (long i = 1; i <= n; i++) { sum += Function_one(i); } return sum;}long main(){ long n; while (cin >> n) { cout << Function_one(n) << ',' << Function_two(n) << endl; } return 0;}
二、快速幂,复杂度是logn
线性代数书上,这是作为例题讲的,就是证明斐波那契数列可以由一个公式,即一次计算就能求出答案,那么这样他的复杂度是不是变成O(1)呢?实际上在那个等式中,仍然存在着幂的运算。所以快速幂还是目前我觉得计算斐波那契数列不错的方法之一。
思路就是求斐波那契数列第n项即求对于矩阵{1,1;1,0}的n次幂,说实话我是不知道的,看了线性代数的有关内容又看了一下网上一些人的解法。然后结合他们的一些思想。写的这个
代码:
#include <iostream>using namespace std;struct Matrix{ int mat[2][2]; Matrix() //构造 { mat[0][0] = 1; mat[0][1] = 1; mat[1][0] = 1; mat[1][1] = 0; } friend Matrix operator * (const Matrix& a, const Matrix& b);//友元函数声明};Matrix operator * (const Matrix& a, const Matrix& b)//乘法重载{ Matrix m; m.mat[0][0] = a.mat[0][0] * b.mat[0][0] + a.mat[0][1] * b.mat[1][0]; m.mat[0][1] = a.mat[0][0] * b.mat[0][1] + a.mat[0][1] * b.mat[1][1]; m.mat[1][0] = a.mat[1][0] * b.mat[0][0] + a.mat[1][1] * b.mat[1][0]; m.mat[1][1] = a.mat[1][0] * b.mat[0][1] + a.mat[1][1] * b.mat[1][1]; return m;}//*********************************************************//函 数 名:power//参 数: exp m// 指数 矩阵//返 回 值:矩阵//备 注:递归求矩阵//*********************************************************Matrix power(const Matrix& m, int exp){ if (exp == 0)//递归终止条件 { Matrix r; r.mat[0][0] = r.mat[1][1] = 1; r.mat[0][1] = r.mat[1][0] = 0; return r; } Matrix val = power(m, exp / 2); if (exp % 2) return m*val*val; else return val*val;}//*********************************************************//函 数 名:Function_one//参 数: n 第n项//返 回 值:答案//备 注:递归求数列第n项//*********************************************************int Function_one(int n){ Matrix m; m = power(m, n); return m.mat[0][1];}//*********************************************************//函 数 名:Function_two//参 数: n 前n项//返 回 值:答案//备 注:递归求数列前n项和//*********************************************************int Function_two(int n)//这个函数没有什么改动,我认为一个加号递归,复杂度是不会影响多少的{ int result; if (n == 0)return 0; else { result = Function_one(n) + Function_two(n - 1); } return result;}long main(){ int n; while(cin >> n) cout << Function_one(n)<<','<<Function_two(n) << endl; return 0;}
阅读全文
1 0
- 斐波那契数列的c++实现,以及求和数列实现
- 斐波那契数列的非递归c语言实现以及斐波那契数列的应用
- 斐波那契数列C实现
- SQL实现斐波那契数列求和
- 斐波那契数列数列的实现
- C语言斐波那契数列的多种实现
- 斐波那契数列的实现
- 斐波那契数列的实现
- 斐波那契数列的实现
- 斐波那契数列实例讲解以及C++实现
- Python 实现斐波那契数列 (黄金分割数列)
- c/c++实现斐波那契数列
- C/C++实现斐波那契数列
- c 实现斐波那契(fibonacii)数列
- 用 C 语言实现 斐波那契数列
- C语言递归方法实现斐波那契数列
- 斐波那契数列算法c语言实现
- 斐波那契数列C语言实现
- Foreach 函数在PHP 7 中的变化
- iOS开发之桌面快捷方式【Web Clip】
- 忏悔录
- 线程死锁
- MTK GPIO的定制详解
- 斐波那契数列的c++实现,以及求和数列实现
- 使用cropbox.js+jquery.js+servlet实现图片的上传下载
- 阿里巴巴开源框架Weex学习之 weex pack与weex toolkit的区别
- L298N电机驱动资料,带光电隔离
- 线程的基本概念
- 19.java语言基础-赋值运算符
- 练习77
- [RK3288][Android6.0] 调试笔记 --- Android预编译拷贝多个文件方法
- 解决:-bash: java: command not found