🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

312閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/09/21 12:17

編集2019/09/21 13:22

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>

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2019/09/21 12:27

otn

総合スコア85890

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/21 12:52

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

2019/09/21 13:02

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

退会済みユーザー

2019/09/21 13:20

ありがとうございます。こちらはうまく表示されました。factorial2.htmlを追加で載せます。 これを参考に質問のコードを書いて実行しています。どこか間違いがあるかもしれませんので、参考書のpコードを吟味してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問