为什么这个功能显示24?

时间:2017-09-03 03:41:30

标签: javascript

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的书。

5 个答案:

答案 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