书中方法一:递归,这种方法效率不高,因为可能会有很多重复计算。

	public long calculate(int n){
if(n<=0){
return 0;
}
if(n == 1){
return 1;
}
return calculate(n-1) + calculate(n-2);
}

书中方法二:更好的方法是将这个斐波那契数列的计算理解成动态规划,第n步的结果依赖于第n-1步和第n-2步的结果,状态转移方程很容易写出来。

	public long calculate2(int n){
if(n <= 0)return 0;
if(n == 1)return 1;
long preLast = 0;
long last = 1;
long result = 0; for(int i=2; i<=n; i++){
result = preLast + last;
preLast = last;
last = result;
} return result;
}

扩展:青蛙跳阶,一次可以跳1阶或2阶,问跳上n阶台阶有多少种跳法。

依旧可以利用动态规划的思想,第m阶的跳法总数 可由 第m-1阶的跳法总数加上第m-2阶的跳法总数 得到。从头开始遍历到n就可以求出第n阶的跳法总数。

最新文章

  1. FIFO页面置换算法
  2. 序列化SerialVersionUID
  3. Form personization(Form 个性化)报无权限
  4. Spark服务启动的一些总结
  5. 70. Climbing Stairs
  6. 修改app名字
  7. 一个简单的Servlet工具
  8. JAVA 实现tail -f 日志文件监控功能
  9. vue-父子组件嵌套的示例
  10. Java并发-任务执行
  11. 极致21点开发DAY3
  12. 【360图书馆】插入U盘自动攻击:BadUSB原理与实现
  13. java【基础】多态
  14. 2018-04-21 搭建Python官方文档翻译环境
  15. Docker 搭建Spark 依赖singularities/spark:2.2镜像
  16. metadata信息的采集
  17. linux AB web 性能测试工具
  18. 安装Ubuntu后要做的事
  19. Java基础-JVM调优策略简介
  20. spark streaming 使用geoIP解析IP

热门文章

  1. Vue Cli3 TypeScript 搭建工程
  2. R语言——ifelse函数
  3. winsows CMD及Linux命令大全 欢迎补充
  4. python基础--文件的操作
  5. django中collectstatic的使用
  6. eclipse没有Web项目和Server选项
  7. URL编码表
  8. NLP第一周
  9. 第四周作业—N42-虚怀若谷
  10. Mac终端的Cocoapods创建自己的私有库和公有库