阶乘——arguments/Array.reduce()与Array.reduceRight()的实践
来源:互联网 发布:淘宝一分钱购物 编辑:程序博客网 时间:2024/06/06 02:58
阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。
0! = 1;
1! = 1;
2! = 1 * 2 ;
3! = 1 * 2 * 3;
n! = 1 * 2 * 3 * …… * n ;
我们在代码里面肯定是不可能这样实现的,因为n的不确定性,所以我们要写一个函数来实现。
var factorial = function(n){ if(n < 2) return 1; else return n * arguments.callee(n - 1);}var a = factorial(0); //1var b = factorial(1); //1var c = factorial(2); //2var d = factorial(3); //6
满足要求,我们在实现的时候实际上主要用到的arguments.callee,
arguments.callee指代当前正在执行的函数,通过它可以引用匿名函数自身。该属性值定义在函数体中。
前两天看的Array.reduce()感觉也可以实现,Array.reduce()从数组元素中计算一个值,共两个参数,第一个参数是一个函数,可以合并两个值(比如两个数组元素),并返回一个缩减的新值,第二个参数是一个数值,用来缩减数组的可选初始值。
[1,2,3,4].reduce(function(x,y){ return x*y; }, 1); //24
有点像阶乘,那就可以实现了。
var factorial = function(n){ if(n < 2) return 1; else{ var array = []; for(var i = 2; i <= n; i++){ array.push(i); } return array.reduce(function(x,y){ return x*y; }, 1); };}var a = factorial(0); //1var b = factorial(1); //1var c = factorial(2); //2var d = factorial(3); //6var e = factorial(4); //24
既然Array.reduce()可以实现,那么Array.reduceRight()也是可以实现的,Array.reduceRight()与Array.reduce()的不同之处是Array.reduce()是从左到右缩减数组,而Array.reduceRight()是从右到左缩减数组,参数都一样。
var factorial = function(n){ if(n < 2) return 1; else{ var array = []; for(var i = 2; i <= n; i++){ array.push(i); } return array.reduceRight(function(x,y){ return x*y; }, 1); };}var a = factorial(0); //1var b = factorial(1); //1var c = factorial(2); //2var d = factorial(3); //6var e = factorial(4); //24
虽然后面两种方式也可以实现,但明显复杂了许多,推荐使用第一种。
阅读全文
0 0
- 阶乘——arguments/Array.reduce()与Array.reduceRight()的实践
- ES5中Array新增加的API接口 forEach map filter some every indexOf lastIndexOf reduce reduceRight
- Array.reduce
- Array.reduce()方法的使用
- 将 "arguments" 转变为 Array 的多种姿势
- JavaScript——Array——reduce()方法应用
- js array arguments
- javaScript--数组(Array)的reduce方法解析
- 减少你对Array.reduce()的恐惧!
- JavaScript Array "slice","reduce"
- javascript-reduce 方法 (Array)
- reduce 方法 (Array) (JavaScript)
- Array.prototype.reduce()
- js Array.prototype.reduce()
- JavaScript数组的高级用法-reduce和reduceRight详解
- JavaScript数组的高级用法-reduce和reduceRight详解
- Array.prototype.slice.call(arguments)
- Array.prototype.slice.call(arguments)
- Java去掉指定字符串的开头的指定字符
- Android内存优化(三)避免可控的内存泄漏
- qt中文字图片跟随鼠标移动
- 全局环境与局部环境的访问比较
- PAT 1032 Sharing(哈希)
- 阶乘——arguments/Array.reduce()与Array.reduceRight()的实践
- 从论语走向0,1的世界
- 2017 计蒜之道 初赛 第三场 腾讯狼人杀(简单)(暴搜)
- 操作系统概念(高等教育出版社,第七版)复习——第十三章:I/O输入系统
- pagerank算法
- Java优化
- ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)
- 【深度学习】DeepMind关系推理网络
- Tomcat相关问题