const factorial = (n) => {
return innerFactorial(n, 1);
function innerFactorial (x, y) {
if (x == 1) {
return y;
}
else {
return innerFactorial(x-1, x * y);
}} }
factorial(4)
/=> 24
我在想如果4被用作n而y必须是1,那么内部阶乘参数应该是4-1,4次1,所以它应该是4次1,然后3次1然后2次1然后1次1,等于10,但它等于24,我不知道为什么。有人可以解释这个功能。这是关于Ecsmascript 6的书。
答案 0 :(得分:0)
您显示的功能会将值相乘,因此4 * 3 * 2 * 1 = 24
答案 1 :(得分:0)
第1步
factorial(4)
= innerFactorial(4,1)
= innerFactorial(4-1,4*1)
= innerFactorial(3,4)
第2步
innerFactorial(3,4)
= innerFactorial(3-1,4*3)
= innerFactorial(2,12)
第3步
innerFactorial(2,12)
= innerFactorial(2-1,12*2)
= innerFactorial(1,24)
第4步
innerFactorial(1,24)
= 24
答案 2 :(得分:0)
这是每个递归循环返回的内容:
Connection.read
答案 3 :(得分:0)
通过循环看看会发生什么:
innerFactorial(4, 1)
这导致:
innerFactorial(4-1, 4*1) // innerFactorial(3, 4)
导致:
innerFactorial(3-1, 3*4) // innerFactorial(2, 12)
然后:
innerFactorial(2-1, 2*12) // innerFactorial(1, 24)
Finnaly,因为x==1
,这会返回y
,即24。您编写的函数是计算阶乘的正确方法。
答案 4 :(得分:0)
Factorial(4)
=> innerFactorial(4, 1)
=> innerFactorial(4-1, 4 * 1);
=> innerFactorial(3, 4);
=> innerFactorial(3-1, 3 * 4);
=> innerFactorial(2, 12);
=> innerFactorial(2-1, 2 * 12);
=> innerFactorial(1, 24);
=> 24 // if the first param is 1, return 24