<script type="text/javascript"> //1*2*3*4*。。。n = n! //n! = (n-1)*n var a = 3; function fun(n){ if(n == 1) return 1; else{ var b = fun(n-1);//n-1的阶乘 return b*n; //return n*fun(n-1) } } var s = fun(a); </script>
2 回答
上头
TA贡献7条经验 获得超5个赞
兄弟你这个代码写起来有点不怎么好,我给个简单明了的例子代码给你,希望对你有帮助。
function sum(num) { if(num > 1){ return num * arguments.callee(num - 1); // arguments.callee指向正在执行的函数 } else { return 1; // 当参数的值为1时,函数返回1 } } console.log(sum(5)) // 输出120 console.log(sum(10)) // 输出3628800 已用计算机计算无误
看不懂的地方百度随便都可以了解到,希望可以帮到你。
super_mb
TA贡献101条经验 获得超107个赞
就是这么乘的:调用fun(3),得到3*fun(2),于是接着调用fun(2),得到2*fun(1),接着调用fun(1),fun(1)返回1,所以不再调用,而是沿着刚刚调用的路径返回,也就是:调用fun(1)得到1,返回上一级2*fun(1),而fun(1)返回1,所以为2*1=2,即第二步调用的fun(2)返回的值是2,所以回到3*fun(2),得到3*2=6,接着返回到fun(3)的调用,即返回6给s
添加回答
举报
0/150
提交
取消