所谓递归函数就是函数在自身的函数体重调用自身
定义一个递归函数需要两个必要条件:
(1)包含一个结束递归的条件,避免程序陷入死循环;
(2)包含一个递归调用语句;
最简单的一个递归函数
function fn(n){
if(n<=1){
return;
}
else{
return n*fn(n-1)
}
}
fn(5) //120
但在这种函数中会遇到fn is not a function的情况。这时可以借助arguments.callee这个方法来解决。
function fn(n){
if(n<=1){
return 1;
}else{
return n*arguments.callee(n-1)
}
}
var aa = fn;
console.log(aa(5)) //120
但是arguments.callee是一个很大的对象,每次再去使用的时候,都需要去重新创建,若大量的进行使用,会严重影响浏览器的性能,早就已经淘汰。另一种操作就是内部函数起一个名字。
function fn(n){
var array = [];
return (function aa(){
n*n-1
n--;
if(n !=0){
aa();
}
return arr;
})()
}
fn(5) //120