方法1:
function factorial(num){
if(num<=1){
return 1
} else {
return num*factorial(num-1)
}
}
这种方法虽然可以实现阶乘,但是有一个缺点就是耦合度太高,函数名称不可改变。
方法2:
function factorial(num){
if(num<=1){
return 1
} else {
return num*arguments.callee(num-1)
}
}
对于函数进行解耦,函数名无论怎么变都不影响函数功能的实现,但是这种方法也有一个问题就是访问arguments的操作,因为它是一个很大的对象,每次递归时都需要重新创建,对于浏览器性能影响较大,还会影响闭包,所以我们进一步优化。
方法3:
function factorial(num){
if(num<=1){
return 1
}
let res = 1
return (function fn(){
res*=num
num--
if(num!=0){
fn()
}
})()
}
网友评论