尻尾耳について...


テール再帰
再帰関数の呼び出しスタックが深いほど、メモリオーバーヘッド(スタックオーバーフロー)の問題を解決するための再帰呼び出し方式とは、再帰関数の実行結果を演算に使用せずに直接返すように、前の関数の状態を維持する必要がない再帰関数を記述することである.
Butテールが正常に動作するように、プラットフォームはTail Call Optimizationをサポートする必要があります.
// 일반 재귀함수
function factorial(n) {
  if (n === 1) {
    return 1;
  }
  return n * factorial(n -1);
};

// 꼬리 재귀함수
function factorialTail(n, acc) { //acc: accumulator
  if (n === 1) {
    return acc;
  }
  return factorialTail(n - 1, acc * n); 
//일반 재귀에서의 n * factorial(n - 1)과 달리 반환값에서 추가연산이 필요없음
}
function factorial(n) {
  return factorialTail(n, 1);
}