什么是阶乘(Factoral)
一个正整数的阶乘是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!
阶乘函数是递归(Recursion)典型示例,在JavaScript中可能运用到递归(Recursion)函数
什么是递归(Recursion)
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。(来自wikipedia)
在函数的定义中使用函数自身的方法。简单理解就是:自我复制的过程。
如何实现阶乘(Factoral)函数
数学上的阶乘(Factoral)函数定义,阶乘函数的参数是一个自然数,它返回1
与此数之间所有数的乘积。比如,6
的阶乘是1 x 2 x 3 x 4 x 5 x 6 = 720
,这样的方式可以用一种递归函数来表示,如果n
是 6
,模式为:
1 | 0! = 1 // 1 |
因此,阶乘可以简单的定义为:
0
的阶乘是1- 任何数的阶乘都是此数与比此数小一的数的阶乘
定义一个factoral()
函数来表示:
1 | factoral(0) = 1; |
第一行0
的阶乘为1
,第二行表示任意别的数n
的阶乘等于n
乘以n-1
的阶乘。
注意那个把n-1
括起来的括弧:没有这个括弧代码就会被解析称为(factorial n) - 1;
函数行为的优先级是很高的,会最先执行。
阶乘(Factorial)实现算法
阶乘函数在JavaScript中也是一种典型的算法:
factoral()
函数返回的是一个整数的阶乘- 如何整数用字母
n
表示,所有正整数的阶乘是小于或等于n
- 阶乘通常用的表示符号是
n!
阶乘(Factoral)测试用例
factoral(0)返回1
factoral(1)返回1
factoral(5)返回120
factoral(10)返回3628800
factoral(20)返回2432902008176640000
几种实现阶乘(Factoral)的方法
递归(Recursion)法
1 | /** |
使用函数arguments.callee属性解耦
1 | function factoral (n) { |
while loop
(while 循环)法
1 | function factoral (num) { |
for loop
(for 循环)法
ES6数组迭代法
1 | function factoral (num) { |