Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript can';我不懂计算的逻辑_Javascript - Fatal编程技术网

Javascript can';我不懂计算的逻辑

Javascript can';我不懂计算的逻辑,javascript,Javascript,一切都清楚了(4-1)*4=12 这里是我得到的困惑是递归调用吗?因为我们在内部返回fac函数,这是一种调用吗?我了解如何像本例中的console.log(fac(4));,但我不明白它是如何计算返回fac(n-1)*n的; 如果有人能解释计算是如何进行的,另一件事我不能理解代码在这两个例子中是不同的,一个只返回值,另一个返回什么?函数中的函数。。。。这就是我困惑的地方。 谢谢你抽出时间 是,这是一个递归调用。函数继续调用自身并递减参数,直到传递的值为0。函数不返回自身,而是调用自身并返回结果。

一切都清楚了(4-1)*4=12

这里是我得到的困惑是递归调用吗?因为我们在内部返回fac函数,这是一种调用吗?我了解如何像本例中的console.log(fac(4));,但我不明白它是如何计算返回fac(n-1)*n的; 如果有人能解释计算是如何进行的,另一件事我不能理解代码在这两个例子中是不同的,一个只返回值,另一个返回什么?函数中的函数。。。。这就是我困惑的地方。
谢谢你抽出时间

是,这是一个递归调用。函数继续调用自身并递减参数,直到传递的值为0。函数不返回自身,而是调用自身并返回结果。这是因为函数在作为参数传递0时终止并停止调用自身

就这样


fac(4)
->
fac(3)*4
->
fac(2)*3*4
->
fac(1)*2*3*4
fac(0)*1*3*4
1*1*2*3*4
->
24
这是5的阶乘的一个例子,但与4相同

请尝试以下链接了解更多信息:


是的,它被称为递归

fac(4)
计算的值如下:

function fac(n) {
  if (n == 0)
    return 1;
  else
    return fac(n - 1) * n;
};
console.log(fac(4));
//24
所以最终会是这样

fac(4) = fac(3) * 4
fac(3) = fac(2) * 3
fac(2) = fac(1) * 2
fac(1) = fac(0) * 1
fac(0) = 1

这就是它的求值方式,从而得到阶乘值。

我认为这里有格式问题,应该是两个独立的代码块吗?
fac(4) = fac(3) * 4
fac(3) = fac(2) * 3
fac(2) = fac(1) * 2
fac(1) = fac(0) * 1
fac(0) = 1
 fac(4) = 1 * 1 * 2 * 3 * 4