递归函数是自己调用自己的函数。
递归函数执行时会形成一个调用记录,当子一层函数代码执行完成之后父一层函数才会销毁调用记录,这就形成了调用栈。栈的叠加可能会产生内存溢出。
n的阶乘
//案例一 普通递归
function factorial(n){
if( n === 1) return n;
return n * factorial(n-1);
}
//案例二 尾递归
function factorialW(n){
if( n === 1) return n;
return n * factorialW(n-1);
}
因为尾递归函数每子一层不再需要使用父一层的变量,所以父一层执行完毕就会销毁栈记录,避免了内存溢出节省了内存空间。