by shigemk2

当面は技術的なことしか書かない

JavaScript Ninjaの極意 4 再帰

関数が自分自身を呼び出し、コールツリーのなかである関数が
元の連鎖を呼び出すとき、再帰が発生する

再帰の条件

  • 自己参照(自分自身を呼び出していること)
  • 終了への収束(再帰を停止する条件が実装されていること)
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Listing 4.2</title>
    <script type="text/javascript" src="../scripts/assert.js"></script>
    <link href="../styles/assert.css" rel="stylesheet" type="text/css">
  </head>

  <body>
    <script type="text/javascript">

      function chirp(n) {                                      //#1
        return n > 1 ? chirp(n - 1) + "-chirp" : "chirp";      //#1
      }                                                        //#1

      assert(chirp(0) == "chirp",                  //#2
            "名前付き関数の呼び出しは予想通りに行われる。");   //#2
      assert(chirp(1) == "chirp",                  //#2
            "名前付き関数の呼び出しは予想通りに行われる。");   //#2
      assert(chirp(2) == "chirp-chirp",                  //#2
            "名前付き関数の呼び出しは予想通りに行われる。");   //#2
      assert(chirp(3) == "chirp-chirp-chirp",                  //#2
            "名前付き関数の呼び出しは予想通りに行われる。");   //#2
      assert(chirp(4) == "chirp-chirp-chirp-chirp",            //#2
            "名前付き関数の呼び出しは予想通りに行われる。");   //#2

    </script>
  </body>
</html>