来,我们先弄懂一些概念。
概念:
- 尾调用:指函数内部的最后调用一个函数,并将返回值直接返回给函数
// 比如,这就是一个尾调用
function out(){
return other();//直接将结果返回给out
}
//比如,这个就不是尾调用
function not(){
return get()+8;//因为他没有直接返回其函数值,所以就不是尾调用
}
2.递归:直接或间接的调用自己的函数,一般来说,递归有递归出口和递推公式
//递归求阶乘
function fac(n){
if(n == 0) //瞧,这是出口
return 1;
else //看,这就是递推公式
return n*fac(n-1); //你看下它是不是在调用自己
}
- 尾递归:尾调用自己自身的函数就是尾递归
// 阶乘的尾递归
function fac(n,res){
if(n===1) return res;
else return fac(n-1,n*res)
}
console.log(fac(5,1)) //调用
概念弄懂了,那就说下尾递归的好处
尾递归的好处:避免调用栈频繁的进行出栈进栈操作。
好,结束分享,谢谢观看