[算法学习]斐波那契数计算
2016-02-03 14:24
211 查看
问题描述: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
分析:
这里有两种解法,一种是用递归,一种使用循环。用递归的解法看起来很很简单,只需几行的代码就可以搞定,但是却隐藏着巨大的空间消耗和时间 消耗 。一种使用循环来做,写起来有点难看,至少没递归写起来好看,但是却比递归效率更高,几乎没有内存消耗。
(2). 循环。代码如下(时间复杂度是O(N)):
分析:
这里有两种解法,一种是用递归,一种使用循环。用递归的解法看起来很很简单,只需几行的代码就可以搞定,但是却隐藏着巨大的空间消耗和时间 消耗 。一种使用循环来做,写起来有点难看,至少没递归写起来好看,但是却比递归效率更高,几乎没有内存消耗。
代码思路
(1). 递归。代码如下(时间复杂度是指数级!大约是(5/3)^N,N很大的时候StackOverflowError,应该是存放递归方法的栈空间溢出):[code] public static int getFibonacci(int n) { if(n<1) { return 0; } if(n==1||n==2) { return 1; } return getFibonacci1(n-1)+getFibonacci1(n-2); }
(2). 循环。代码如下(时间复杂度是O(N)):
[code] public static int getFibonacci(int n) { if(n<1) { return 0; } if(n==1||n==2) { return 1; } int sum=0; int sum1=1;int sum2=1; for(int i=3;i<=n;i++) { sum=sum2+sum1; sum1=sum2; sum2=sum; } return sum; }
相关文章推荐
- Android Jni开发之自动化编译添加jni代码提示
- Xcode里-ObjC, -all_load, -force_load
- (25)HttpClient session
- spring batch 3:Flow step简单介绍
- 自己的CSDN博文阅读量简单分析(至2016年1月)
- (24)如何使用HttpClient
- fatal error C1083: 无法打开源文件
- ble广播包解析
- oracle数据库包package小例子
- JavaScript是如何做到单线程异步的
- 嵌入式 SIGBUS和SIGSEGV详解
- windbg的命令类型
- Linux 启动grub error 24: Attempt to access block outside partition 解决
- (23)事件分发机制
- windows開始菜单和任务栏图标显示空白而且点击时候显示项目已被移动或删除
- EhCache 分布式缓存/缓存集群
- apache代理多个tomcat实例
- jquery实现替代iframe的功能
- dom4j学习总结(一)
- GCD&&单粒