笔趣阁 > 科幻小说 > 编程之战 > 章节目录 第四章 十万级斐波那契

 推荐阅读: 重生弃少归来 黎明之剑 说好的末世呢 七根凶简 民调局异闻录之勉传 学霸的黑科技系统 无限英灵神座 快穿攻略,病娇男主,宠翻天! 终极透视眼 纵横诸天的武者

编程之战 第四章 十万级斐波那契


“依上题所述,若N在100000到400000之间,作何解?”
    杨成深吸一口气,他明白自己此前的思路已经走到了尽头,必须得换一种方式了。
    对于递归而言,十万级以上是遥不可及的一道天堑,不管怎样使劲,都只有一种结局——挂。
    所以,他决定了,放弃递归,使用传统的线性方法,顺序遍历求解。
    递归不是顺序的,斐波那契数列的分治法是一种深度遍历求解,递归栈中函数作用域对象的开辟和回收都需要很多额外的性能,而顺序遍历不存在这样的情况。
    顺序遍历共享的是同一个作用域!
    可以使用两个临时的变量,因为公式f(n)=f(n-1)+f(n-2)的缘故,要求第n项你只需要分别保存第n-1项和第n-2项的结果。
    这样做,将算法的空间复杂度降到了最低,和递归庞大的保存栈相比,优势就太大了。
    想清了思路,杨成正打算提笔就写,他突然想到一个令人震惊的后果。
    对于JavaScript,浮点数是有大小限制的,对于第几十万项的斐波那契数,它显然已经远远超出了浮点型的范围,那么,自己这个算法会不会导致溢出?
    好在他很快想通了,关卡设计者怎么会想不到这样的问题,自己只要能写出正确的算法来就OK了。
    这个算法其实并不难,杨成用了十几行代码就搞定了,他心里其实还是有些忐忑的,作为一名准程序员,有这种意识其实还是挺正常的。
    不是有个笑话吗,假如有人问一名程序员:你的程序是不是出Bug了?这个程序员听到后第一反应是:傻x你懂程序嘛?你会用嘛?而如果有人问程序员:这个效果和预期的有些不一致呢。那程序员肯定心想:糟了!肯定是出Bug了!
    杨成看着小册子第三次浮空,他有些习以为常了。
    舒服地打了个哈欠,伸了伸懒腰,他发觉一个有趣的现象。
    这窗外的月亮是不是太完美了,可以说是无暇的。
    古人都常说:人有悲欢离合,月有阴晴圆缺,你这月亮做的也太假了一点吧?!
    是不是美工姐姐被拖欠了工资啊?
    杨成恶狠狠地想着,在心里恶搞了一番游戏团队。
    然后他翘着二郎腿,再给自己来了一杯焦炭咖啡。
    时间过得很慢,这次小册子被翻页的时间和次数都多得多,显然和数据量有关。
    杨成甚至怀疑是台286电脑在充当服务器处理,现代电脑有这么辣鸡嘛?是不是并发量太大了,服务器被挤爆了的缘故呢?
    等到杨成开始怀疑这个小册子组件模块编写者性别取向问题的时候,小册子终于完成了它的使命,“啪”的一声“坠机”了。
    “玛德,至少过去了半个钟头”,杨成嘟哝着,再次翻开小册子某页。
    刚才写的那十几行代码旁边,又多了一个小小的对勾。
    然而,还没来得及为自己高超的“手写代码”能力欢呼雀跃,杨成很快看到了让自己张大嘴巴的一个景象。
    “嚯!”,他不禁倒吸一口凉气,犹如泄了气的皮球,倒在了后椅上。
    “先前的思路又得改!”

温馨提示:方向键左右(← →)前后翻页,上下(↑ ↓)上下滚用, 回车键:返回列表

上一章章节目录下一章