再帰関数(recursive function)とは、自分自身を呼ぶ関数である。
function trouble () {
  trouble();
}
↑のように、関数内で自分自身を呼ぶことで繰り返し処理を行う。再帰関数について注意が必要なのは無限再帰である。trouble()は再帰の終了条件が設定されていないため、無限に自分自身を呼び出し続ける。再帰関数を書く際には、再帰の終了条件をあらかじめ設定しておくべきである。

再帰の古典的な例は、階乗計算である。
function factorial (n) {
  if (n < 0) {
    return; // 無効な入力なので終了
  } else if (n <= 1) {
    return 1;
  } else {
    return n * factorial(n-1);
  }
}

factorial(3) // 6
factrorial(5) // 120

もっとも、同じ処理はループを使うことでも実現できる。
function factorial (n) {
  if (n <0) {
    return;
  } else {
    var result = 1;
    for (var i = 1; i <= n; i++) {
      result = result * i;
    }
    return result;
}
再帰は複雑な問題を簡単な処理で解くことができる。しかし、関数を繰り返し呼び出すことは、ループに比べると処理の効率が悪いことが多い。また、Flashの実行環境は再帰の最大回数に制限を設けており、初期値では1000回までとなっている。


今日の進捗:2526→2553/20168(kindle用書籍フォーマット、mobi形式でのページ数)