高效的斐波那契数列实现
2016-03-12 14:17
381 查看
一般斐波那契数列在教科书中都是以递归的形式登场的,所以一般有常规思维是用递归解决。
但递归的效率实际是很低的,在计算数列中,有大量的重复性计算。以这种方式计算的时间复杂度是以指数递增的,。
实用的高效解法,利用循环来解出。复杂度为O(n)。
更加高效的O(logn)算法,但并不算实用。
就是满足一个归纳的等式。
[ f(n)
f(n-1) [ 1 1
f(n-1) f(n-2) ]= 1 0 ] ^n-1
斐波那契数列的常用变形,青蛙跳台阶和用格子覆盖矩形。
long long Fibonacci(unsigned int n)//递归实现 { if (n <= 0) return 0; if (1 == n) return 1; return Fibonacci(n - 1, n - 2); }
但递归的效率实际是很低的,在计算数列中,有大量的重复性计算。以这种方式计算的时间复杂度是以指数递增的,。
实用的高效解法,利用循环来解出。复杂度为O(n)。
long long Fibonacci(unsigned int n) { int result[2] = { 0, 1 };//将首两项先储存起来 if (n < 2) return result ; long long fibMinus1 = 1; long long fibMinus2 = 0; for (unsigned int 2; i <= n; i++) { fibN = fibMinus1 + fibMinus2; fibMinus2 = fibMinus1; fibMinus1 = fibN; } return fibN; }
更加高效的O(logn)算法,但并不算实用。
就是满足一个归纳的等式。
[ f(n)
f(n-1) [ 1 1
f(n-1) f(n-2) ]= 1 0 ] ^n-1
斐波那契数列的常用变形,青蛙跳台阶和用格子覆盖矩形。
相关文章推荐
- jQuery(一)
- Java开发必会的Linux命令
- git 常用命令--详述
- ahu-557容斥原理
- Java读取操作word2003 word2007 word2010文档
- [Unity] 常用技巧收集
- phoneGap入门教程
- Java并发编程(一)
- SVN经常使用命令说明
- [转]World Wind学习总结一
- Java反射
- rebmuNyppaH.202
- VR相关网站
- Unity3d导出Xcode各种问题总结
- swift 2.0 与 OC 相比较,标签栏和导航栏书写的差别
- nginx 优化(突破十万并发)
- web文件上传中需要考虑的几个问题
- 使用基于ThinkPHP3.2.3的ThinkAdmin创建手机电脑通用的表白墙(七)优化:访问控制
- R语言--减去某只出现过N次的所在的行
- string类的写时拷贝