这段时间在看算法相关的一些东西;

因为算法不好连笔试都过不了(哭,其实算法不仅仅是为了笔试面试,更是为了日后在工作中提高软件的运行效率。这让我联想到了前不久看过的一篇文章:李开复:算法的力量

以前没有重视算法,现在都要该还回来啦;

斐波那契数列

今天看到斐波那契数列感觉很有意思; 斐波那契数列:

f(0) = 0;

f(1) = 1;

f(n) = f(n-1) + f(n-2) n>2;

嗯,不是很复杂,实现起来也很简单,但是不同的斐波那契数列的实现,执行时间存在巨大差异!!! 我写了三种实现方式,地址在这 -》 斐波那契数列三种实现

存在重复计算的递归方式 我们很容易通过递归的方式计算斐波那契数列,这也是最简洁的一种方式,代码量非常少。 但是这种方式存在大量重复计算的项,如:

f(9) = f(8)+f(7);

f(8)=f(7)+f(6);

f(7)被重复计算了,当所求的项比较多的时候重复计算的项就比较多了

无重复计算的递归方式 重复计算很严重的影响效率,那么我们保存上一项计算的结果值留给下一次计算使用就行了。 相对于上面那种方式,这种方式更像是从上往下计算,从0开始计算直到n

f(8)=f(7)+f(6); //保留f(7)和f(8)的值留给下一次运算使用

f(9)=f(8)+f(7); //f(7)和f(8)的值直接从上一次运算获取

通过循环的计算方式 这种方法我是在看《剑指offer》上面看到的,我把它简化了一下,我觉得我简化后的代码很赞~凸^-^凸 上代码:

/**

* 通过循环实现

*

* 时间复杂度:o(n)

* 空间复杂度:o(1)

*

* @param n

* @return

*/

public long fByLoop(int n) {

long[] result = {0, 1};

for (int i = 2; i < n + 1; i++) {

result[i & 1] += result[(i + 1) & 1];

}

return result[n & 1];

}

从斐波那契数列说起:谈谈我的感想

我把三种实现写出来以后,我想跑一下看谁比较快,书上说那种带有重复计算的递归方式很慢,于是我就顺便测一下。 测试结果令我大跌眼镜,

使用重复计算的递归方式计算一百项的斐波那契数列时,计算了四十分钟还没有计算出来,我一度怀疑我的代码有没有问题。无奈,只好把项数减少到五十,才顺利的拿到结果:

我们可以看到,存在重复计算的递归方式耗时是其他方式的20万倍左右,好恐怖!

要是再生产环境中存在这样的算法,再多的服务器都坑不住。看来自己还是要多多练习算法,多多思考,精益求精,才能感受到编程之美;否则一股脑写的代码是堆上去的,自己也就得不到任何的提升。

再来感受一下算法的力量:李开复:算法的力量

其它

计算一百项的时候,我打开了visualvm查看了一下jvm的运行状况,发现了一个有趣数据:

我们看CPU的数据,发现使用率一直停留在25%左右。 因为我的电脑是双核四线程,而我们的程序是单线程的,最多只能使用25%的CPU资源。 哈哈,看来要榨干CPU的资源,多线程必须要掌握啊~

计算一百项的斐波那契数列,现在还没计算出来(。ì _ í。)

c语言输出斐波那契数列pta,从斐波那契数列说起相关推荐

  1. C语言递归算法求斐波那契,递归法求斐波那契数列(C语言版)

    斐波那契数列: 又称黄金分割数列,指的是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 在数学上,斐波纳契数列以如下被以递归的方法定义 ...

  2. JAVA中打印斐波拉契数列_java打印斐波那契数列

    每行 5 个,输出斐波那契数列的前 20 个数字 6. 编写程序接受用户输入一个... 3 ? 这一公式输出斐波那契数列中的前 40 个数. 保存文件名为:bnds11.java class bnds ...

  3. python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)

    最近在查阅斐波那契数列时,看到下面的文章,总结得非常好,于是自己上手使用 Python 练习并实现多种求解方法 守望:面试官问你斐波那契数列的时候不要高兴得太早​zhuanlan.zhihu.com ...

  4. python程序题斐波那契数列通项公式,Python斐波那契数列应用,编程练习题实例六...

    python斐波那契数列,本文是关于Python编程练习题和答案实例六,斐波那契数列应用的示例.引用百度关于斐波那契数列的介绍,大家先简单来的了解下,什么是斐波那契数列? 斐波那契数列(Fibonac ...

  5. 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...

    一句话先回答问题:因为斐波那契数列在数学和生活以及自然界中都非常有用. 下面我就尽我所能,讲述一下斐波那契数列. 一.起源和定义 斐波那契数列最早被提出是印度数学家Gopala,他在研究箱子包装物件长 ...

  6. 一文解决斐波那契数列求前n项和;和求第n个数是多少的问题;斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

    题目:斐波那契数列(Fibonacci)又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)= 0,F(1) ...

  7. 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……。这个数列从第三项开始,每一项都等于前两项之

    Problem Description 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--.这 ...

  8. PTA 7-169 斐波那契数列

    PTA 7-169 斐波那契数列 分数 10 作者 wjl 单位 赤峰学院 斐波那契数列是指这样的一个数列:1,1,2,3,5,8,13,21,-,这个数列从第3个数开始每个数都等于前两个数的和,请输 ...

  9. python查询斐波那契数列通项公式_分享一个神奇的操作系统——斐波那契+MACD,每一波都有20%以上的收益!...

    斐波那契数列,又称兔子数列,或者黄金分割数列.指的是这样一个数列: 0.1.1.2.3.5.8.13.21--从第三项起,它的每一项都等于前两项的和. 为什么是兔子数列?我们假设兔子在出生两个月后,就 ...

最新文章

  1. 写SpringBoot项目的时候,报错Ordinal parameter not bound
  2. Flutter 中的Error的捕获及处理
  3. 带你剖析WebGis的世界奥秘----Geojson数据加载(高级)
  4. php callable 参数,php 利用反射执行callable
  5. 区块链比特币开源_开源资金:比特币,区块链和免费软件
  6. gcn在图像上的应用_使用图卷积网络(GCN)做图像分割
  7. 图的更多相关算法-2(最小生成树)
  8. 雷达最大不模糊速度_雷达基础知识:案例计算
  9. 用python实现遗传算法
  10. The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)(转)...
  11. 李白藏头诗鸿蒙,女子示爱的诗词
  12. 事务(Transaction)的简单理解
  13. 玉湖冷链黄铮洪出任广东省物流标准化技术委员会副主任
  14. AndroidManifest.xml--android系统权限定义
  15. 哈工大2022秋计算机系统大作业——程序人生
  16. php论坛整合,PHPCMS整合Discuz论坛
  17. 足迹推荐位,淘宝足迹推荐位,旺旺打标足迹显示问题,详情页足迹推荐,淘宝详情页的下拉出现足迹,v兔电商
  18. Sign In With Apple
  19. RestTemplate发送form-data请求上传rul资源文件及对象参数
  20. 求一份网页设计结课大作业,要求用到html,css,javascript,的知识

热门文章

  1. 二极管损坏的原因有哪些?
  2. Strftime 时间格式大全
  3. 如何从HITRAN数据库 获取数据
  4. kb4524157安装失败_微软称Win10安装KB3081440可解决更新KB3081424失败问题
  5. 计算机协会活动策划,大学计算机协会活动计划书
  6. 中医诊所一定要去尝试软文营销,效果简直不要太好
  7. 优考计算机组成原理,2000年4月全国高等教育自学考试计算机组成原理试卷
  8. 使用 Vue3 实现锚点组件
  9. 根据ip地址查询地址信息
  10. 前端做CRM管理系统是做什么_悟空CRM:CRM系统能够帮助企业做什么?