js实现斐波那契数列
来源:互联网 发布:复制目录 linux 编辑:程序博客网 时间:2024/06/08 10:15
输入n,求Fibonacci数列的第n项
function fibonacci(n) { if (n < 0) {throw new Error('输入的数字不能小于0'); } if (n == 0) {return 0; } if (n == 1) {return 1; } return fibonacci(n-1) + fibonacci(n-2);}
这其实并不是很好的方法
比如求fibonacci(10)的时候,分解成了fibonacci(9)和fibonacci(8),但是fibonacci(9)又会分解成fibonacci(8)和fibonacci(7),其中就重复计算了fibonacci(8),以此类推,重复的计算非常多,最简单的办法就是记录下已经计算过的值:
function fibonacci2(n) { if (n < 0) throw new Error('输入的数字不能小于0'); let arr = [0, 1]; function calc(n) { if (n<2) { return arr[n]; } if (arr[n] != undefined) { return arr[n]; } let data = calc(n-1) + calc(n-2); arr[n] = data; return data; } return calc(n);}function fibonacciFunc() { let arr = [0, 1]; function calc(n) { if (n < 0) throw new Error('输入的数字不能小于0'); if (n<2) return arr[n]; if (arr[n] != undefined) { return arr[n]; } let data = calc(n-1) + calc(n-2); arr[n] = data; return data; } return calc;} let fibonacci3 = fibonacciFunc();
上面两种方法用到了闭包
fibonacci3的坏处是只要fibonacci3不被释放, 内存中arr数组会一直存在。尤其当计算过比较大的数字后;但是当需要大量的计算fibonacci数时,fibonacci3会比较有优势,但是要记住最后释放fibonacci3,即:
fibonacci3 = null;
还有一种方法就是不用递归,直接循环
function fibonacci4 (n) { if (n < 0) throw new Error('输入的数字不能小于0'); let dataMinusTwo= 0, dataMinusOne = 1, data; if (n == 0) return dataMinusTwo; if (n == 1) return dataMinusOne; for (var i=2;i<=n;i++) { data = dataMinusOne + dataMinusTwo; dataMinusTwo = dataMinusOne; dataMinusOne = data; } return data;}
// 以上方法<剑指offer>中更加详细的说明
0 0
- js 斐波那契数列实现
- js实现斐波那契数列
- 【剑指Offer】JS实现 斐波那契数列
- 斐波那契数列的js实现
- js斐波那契数列求和
- 斐波那契数列算法实现
- 斐波那契数列-递归实现
- 汇编实现斐波那契数列
- PHP实现斐波那契数列
- 实现斐波那契数列
- Java实现斐波那契数列
- Fibonacci(斐波那契)数列实现
- Java实现斐波那契数列
- java实现斐波那契数列
- 斐波那契数列(递归实现)
- JAVA实现--斐波那契数列
- Ruby实现斐波那契数列
- 斐波那契数列的实现
- Android RelativeLayout布局
- 状态码告知从服务器端放回的请求结果
- gradle project sync failed.basic functionality will not work properly
- Oracle字符集的查看查询和Oracle字符集的设置修改
- 三亚游客有福了!三亚游客中心采用全息、体感等“高科技”增强用户体验
- js实现斐波那契数列
- Java 实例说明 位运算(移位、位与、或、异或、非)
- 结构体
- First-Java
- spring+mongodb 支持密码 的整合
- 使用jsoncpp解析json
- C#中的集合类整理
- NSIS根据安装文件log 卸载文件(防止误删)
- javascript使用replace替换字符串中所有字符