题目
!! 题目来源:斐波那契数 - 力扣
分析
对于大名鼎鼎的斐波那契数列,相信大家并不陌生,简单来说,就是斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
那么最简单暴力的思路就是递归:
首先判断边界情况:当 n == 0
或者n == 1
的时候,结束递归,返回 n否则返回 fib(n - 1) + fib(n - 2)
具体代码如下:
const fib = function (n) {
if (n === 0 || n === 1) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
};
结果如下:
事实上,虽然这个思路简单直接,但其算法复杂度是非常高的,即便题目限制了 n 的范围,计算的时候,依然等了好一会儿才算到结果(递归深度与 n 直接相关)。
优化
如两数之和中提到的思路:通常优化时间复杂度的方案是用空间换时间。
这里我们同样可以创建一个 cache 来进行优化:
首先遍历 n,将 0 和 1 直接存入 cache 中 随后依次计算出当前 n 的值,存入 cache 中 当循环结束之后,cache 其实已经是一个完整的斐波那契数列了,而对于题目,我们返回 cache[n] 即可
具体代码如下:
const fib = function (n) {
const cache = [];
for (let i = 0; i <= n; i++) {
if (i === 0 || i === 1) {
cache[i] = i;
} else {
cache[i] = cache[i - 1] + cache[i - 2];
}
}
return cache[n];
};
结果如下:
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!