我正在学习JavaScript中的recurssion,但很难理解这段代码:
function fac(n) {
if (n == 0)
return 1;
else
return fac(n - 1) * n; //bit am having difficulty understanding
}
console.log(fac(5));
我能理解这一点:
var countdown = function(n){
if (n>-1){
console.log(n);
countdown(n-1);
}
}
我理解阶乘的数学概念。
答案 0 :(得分:1)
以下是递归运行的逐步步骤:
fac(5) = fac(4) * 5
fac(4) = fac(3) * 4
fac(3) = fac(2) * 3
fac(2) = fac(1) * 2
fac(1) = fac(0) * 1
fac(0) = 1
所以...现在一起......
fac(5) = 1 * 1 * 2 * 3 * 4 * 5 = 120
答案 1 :(得分:0)
我认为你知道什么是阶乘。此函数将输出指定为fac(n)
的参数的数字的阶乘。
例如,如果您输入3,那么在第一次迭代后,您最终会输入
3 * fac(3-1)
之后你会有
3 * 2 * fac(2-1)
然后
3 * 2 * 1 * fac(0)
如果n == 0,你只做一次你最终以
结尾3 * 2 * 1 * 1
答案 2 :(得分:0)
简单。
来自维基百科:
在数学和计算机科学中,当一类对象或方法可以由两个属性定义时,它们表现出递归行为:
- 一个简单的基本案例(或案例)
- 一组规则,将所有其他案例减少到基本案例
这里的基本案例是0!
if (n == 0)
return 1;
因为0! == 1
将所有案例减少到基本案例的规则是这个数学规则:
N!= N *(N-1)!
在你的代码中
else
return fac(n - 1) * n;