递归之尾递归

504 阅读1分钟

来,我们先弄懂一些概念。

概念:

  1. 尾调用:指函数内部的最后调用一个函数,并将返回值直接返回给函数
// 比如,这就是一个尾调用
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); //你看下它是不是在调用自己
}
  1. 尾递归:尾调用自己自身的函数就是尾递归
// 阶乘的尾递归
function fac(n,res){
    if(n===1) return res;
    else return fac(n-1,n*res)
}

console.log(fac(5,1)) //调用

概念弄懂了,那就说下尾递归的好处

尾递归的好处:避免调用栈频繁的进行出栈进栈操作。

好,结束分享,谢谢观看