博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指offer》— JavaScript(7)斐波那契数列
阅读量:4710 次
发布时间:2019-06-10

本文共 774 字,大约阅读时间需要 2 分钟。

斐波那契数列

题目描述

  大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。

  n<=39


实现代码

function Fibonacci(n){    var arr = [];    arr[0] = 0;    arr[1] = 1;    for(var i = 2; i <= n; i++) {        arr[i] = arr[i - 1] + arr[i - 2];    }    return arr[n];}

思路

看到题目,首先想到的就是递归,f(n) = f(n-1) + f(n-2),这样看来,这一题只要两行代码就搞定了。

if (n<=1) return nelse return Fibonacci(n-1) + Fibonacci(n-2)

然而,测试用例中准备了一个超大的n来让Stack Overflow。

Z31~F09BCFQ@R$N8T[2]4XJ.png
为什么会这样?因为重复的计算。举个例子:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
      = Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
     = Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
由于我们的代码并没有记录Fibonacci(1)和Fibonacci(0)的结果,对于程序来说它每次递归都是未知的,因此光是n=4时f(1)就重复计算了3次之多。
那么该如何求解呢?
以一定的空间代价来避免由重复计算造成的栈空间浪费。

转载于:https://www.cnblogs.com/echovic/p/6430646.html

你可能感兴趣的文章
238. Product of Array Except Self
查看>>
多线程技术交流提纲
查看>>
Java工程师必备书单
查看>>
InnoDB一定会在索引中加上主键吗
查看>>
Scala-字符串操作
查看>>
转一篇《计算机的潜意识》的文章
查看>>
[原] 蒙古文网站汇聚地
查看>>
不平衡学习 Learning from Imbalanced Data
查看>>
2014那些事之跳槽思考
查看>>
Java作业八(2017-10-30)
查看>>
iso移动Safari页面缓存
查看>>
visual studio code 配置python环境方法,不断更新中......
查看>>
base64文件上传的问题
查看>>
2018-2019赛季最后的随想/$\rm{NOIP2018}$游记·启示录
查看>>
事物回滚成功,但是数据表新插入的数据没有变化
查看>>
手机前端开发调试利器-vConsole
查看>>
Struts2基础知识(三)
查看>>
java 学习
查看>>
AJAX 方式
查看>>
《JAVA与模式》之门面模式
查看>>