No.2ベストアンサー
- 回答日時:
既にTacosanもご指摘してますが、
<script>
window.alert(gcd(45, 60));
function gcd(a, b){
var r=a%b;
if(r==0){
return b;
}else{
gcd(b, r); //ここでreturnしてないので計算結果が破棄される
}
}
</script>
再帰的にgcdを辿っていきますが15という結果をreturnしたあとに破棄されているのでundefinedになります。
なので例えばwindows.alert(gcd(15,15))とか答えが一発で出るような物であれば正常に動くのではないでしょうか。
回答ありがとうございます。確かにreturnをつけると正常に動作します。予想ですが、Javascriptでは次のように処理されているのではないかと思います。
「gcd(45, 60)→gcd(60, 45)→gcd(45, 15)→r==0でgcd(45, 15)の戻り値は15。しかし、gcd(45, 60)の戻り値は定義されていない。」
このような理解でいいのでしょうか?
No.3
- 回答日時:
回答の補足の使い方がわからないので新規回答ですいません…。
>回答ありがとうございます。確かにreturnをつけると正常に動作します。
>予想ですが、Javascriptでは次のように処理されているのではないかと思います。
>「gcd(45, 60)→gcd(60, 45)→gcd(45, 15)→r==0でgcd(45, 15)の戻り値は15。しかし、gcd(45, 60)の戻り値は定義されていない。」
>このような理解でいいのでしょうか?
「gcd(45, 60)→gcd(60, 45)→gcd(45, 15)→r==0でgcd(45, 15)の戻り値は15。しかし、gcd(60, 45)の戻り値は定義されていない。」
ですね。
returnを追加した場合は以下のような処理になるかと思います。
1)gcd(45,60)とコール
2)gcd(60,45)とgcd(45,60)の中でコール
3)gcd(45,15)とgcd(60,45)の中でコール
4)gcd(45,15)から15がreturnされる
5)gcd(60,45)から15がreturnされる
6)gcd(45,60)から15がreturnされる
7)15がalertで表示される。
returnがない場合は5)の処理で戻り値として得た15はそのメソッド内で終了します。戻り値はありません(undef)。
さらに6)の処理でも戻り値がないのでundefになります。
よってalertには何も渡されずundefとだけ表示されます。
※c++はあまり詳しくないのですがreturn文を省略した場合最終評価した値を自動的に戻り値にする言語は何種類か存在します:)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#の問題で2つの整数a,bの最大公約数(GCD)を求めるユークリッドの互除法は,aをbで割った余り 2 2022/06/26 16:52
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
onbeforeunload時のwindow.open...
-
VBscriptでVisualBasicのような...
-
JavaScriptからVBScriptの呼び...
-
window.onloadイベントの任意実...
-
文字を入れ替わり表示させたい...
-
<a href="#" …>の意味を教えて...
-
プルダウンメニューを別ファイ...
-
インラインフレームで表示され...
-
bodyにidをつける理由は何ですか?
-
ユーザーが更新ボタンを押さな...
-
乱数を一定時間毎に表示させた...
-
ランダムにページにアクセスしたい
-
pythonのWebスクレイピングでfi...
-
外部ファイルを読み込ませるた...
-
新しいウィンドゥを最大化で立...
-
ページの読み込みが完了してか...
-
jQueryが開かない
-
chromeでの擬似クラス:focus に...
-
base64encodeでの文字化けについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
javascriptでbgmを自動再生する...
-
JavaScriptからVBScriptの呼び...
-
onbeforeunload時のwindow.open...
-
Vbscriptで自分自身のウィンド...
-
ウインドウの後ろに隠れている...
-
javascriptでtableの該当行を削...
-
Java ScriptでIPによるアクセス...
-
Cygwinでログをのこす方法
-
確認ダイアログで「キャンセル...
-
showModalDialogで開いた画面か...
-
ASPで取得した情報をscriptタグ...
-
JavaScript関数呼出し元の要素...
-
datepickerで日付の値を取得したい
-
文字を入れ替わり表示させたい...
-
毎回、ページ読み込み時に1回...
-
曜日ごとにリンク先を変えるJav...
-
window.onloadイベントの任意実...
-
location.reload() について
-
ブラウザの「戻る」ボタンを押...
-
undefinedが表示されてしまう
おすすめ情報