1. 程式人生 > >JavaScript 普通遞迴和尾遞迴函式

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

因為尾遞迴函式每子一層不再需要使用父一層的變數,所以父一層執行完畢就會銷燬棧記錄,避免了記憶體溢位節省了記憶體空間。