首先要面临一个问题何谓阶乘?阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。举例来说,若要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720,720就是6的阶乘。 若要求的数是n,则阶乘式是x=1×2×3×……×n,x就是n的阶乘。
有个特殊的地方:数学家定义,0!=1,所以0!=1!
方法一:对于累加法的延伸使用~累加说白了就是每次计算加上 上一次计算的值,如此使用累乘的方法自然无可厚非!
var result = 1;
for (int j = 1; j <= i; j++) { //一直进行乘法计算,循环到所需要的数为止
result *= j;
}
方法二,递归的方法。首先我们需要了解我们需要做什么,依次求和,那么对于阶乘我们不妨找寻一下其规律。
n=1: 1 result=1
n=2: 1+2 ->fn(1)+2 result=2
n=3: 1+2+3 -->fn(2)+3 result=6
n=4: 1+2+3+4 -->fn(3)+4 -> fn(2)+3+4 -> fn(1)+2+3+4->1+2+3+4 result=24
n=5: 1+2+3+4+5 -->fn(4)+5 -> fn(3)+3+4+5 -> fn(1)+2+3+4+5 ->1+2+3+4+5 result=120
..
n: 1+2+3...+n --> fn(n-1)+n
由上述推断式不难推断出:将每一次的数作为一个函数进行计算,算出结果后再将每个结果进行相加,我们即可得到我们所需要的结果。递归中每次调用自身也是起到了这个作用。
function result(n) {
if(n==1||n==0){ //有个特殊的地方:数学家定义,0!=1,所以0!=1!
return 1;
}
return fn(n - 1) + n;
}
var output = result(6);
console.log(output);
总结:
递归算法是调用函数本身来表示问题的解。计算中直接或间接调用自己本身。( 函数自己调用自己 停不下来,要有跳出的条件!!!)