質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

再起呼び出しで階乗の答えが表示されません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 414
退会済みユーザー

退会済みユーザー

JavaScriptを勉強しています。参考書には関数だけしか載ってなくて、
階乗の答えが表示されません。以下のように実行可能なコードを書いたのですが、
ヘッダーしか表示されません。どこが悪いのか教えてください。
お願いいたします。
Xamppとnotepad++を使っています。

//factorial3.html
<!DOCTYPE html>

<html lang='ja'>
<head>
  <meta charset='UTF-8' />
  <title>匿名関数の再起呼び出し</title>
</head>

<body>

  <h4>匿名関数の再起呼び出し</h4>
  <script>
    // 階乗 n!
    function (n) {
        return n * arguments.callee(n - 1);
      }
      return 1;
    };
    window.alert(function(5));
  </script>
</body>
</html>
//factorial2.html
<!DOCTYPE html>

<html lang='ja'>
<head>
  <meta charset='UTF-8' />
  <title>calleeプロパティによる再起呼び出し</title>
</head>

<body>

  <h4 align=center>calleeプロパティによる再起呼び出し</h4>
  <script>
    function factorial(n) {
      if (n != 0) {
      return n * arguments.callee(n - 1);
      }
      return 1;
    }

    window.alert(factorial(5));

  </script>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

1.関数に名前を付けないと呼び出せません。
2.終了判断(再帰呼び出しをしない判断)をしていないので、無限に呼び続けます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/21 21:52

    ありがとうございます。関数に名前をつけた再起呼び出しのコードは例1、例2と参考書に載っていて、実行できました。例3が匿名関数を使ったコードが出ているんですが、コードの「function (n) {...」から
    「…return 1; };」までしか記載がないので後はわたくしが書き足した部分です。
    ネットにも同じようなコード[(function(n) {
    return n == 0 ? 1 : n * arguments.callee(n - 1);
    })(5); // => 120]があったのですが、うまくいきませんでした。
    これを実行する完全なコードを教えていただけませんか。お願いいたします。

    キャンセル

  • 2019/09/21 22:02

    匿名関数を使うなら、
    window.alert(
    (function (n) {
    if(n>1) return n * arguments.callee(n - 1);
    return 1;
    })(5)
    );

    キャンセル

  • 2019/09/21 22:20

    ありがとうございます。こちらはうまく表示されました。factorial2.htmlを追加で載せます。

    これを参考に質問のコードを書いて実行しています。どこか間違いがあるかもしれませんので、参考書のpコードを吟味してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る