JavaScript 普通递归和尾递归函数

递归函数是自己调用自己的函数。

递归函数执行时会形成一个调用记录,当子一层函数代码执行完成之后父一层函数才会销毁调用记录,这就形成了调用栈。栈的叠加可能会产生内存溢出。

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);
}

因为尾递归函数每子一层不再需要使用父一层的变量,所以父一层执行完毕就会销毁栈记录,避免了内存溢出节省了内存空间。

猜你喜欢

转载自www.cnblogs.com/Garfield520/p/10076626.html