- ベストアンサー
もっと簡略化できそうだけど分からない
JavaScrip歴数ヶ月のものです。 いろいろな構文を実体験で覚えようと思い、『テキストボックスに入力した二つの数値から様々な計算をして出力するフォーム』を作ってみました。 現在2点ほど、もっと手短な方法がありそうなのに見つけられない計算があるので指導お願いします。 1:階乗 現在は var va = 1; for (aa = 1; aa <= valA; aa++) { va *= aa; } calcs[4] = va; 2:valAからvalBまでの積 現在は var ab = 1; for (aa = valA; aa <= valB; aa++) { ab *= aa; } calcs[6] = ab; valA、valBは入力した数値をparseIntで取得したもの、calcs[]は出力をforで回すための配列です。 これを一発の計算ですませてcalcs[]に代入できる方法がある気がするのですが見つけられません。 ひとつの関数で…とまではいかずとももっとスマートなやり方があると思うのですがご存知の方教えていただけませんか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
はっきりと意図がつまめていませんが、 【2:valAからvalBまでの積】が【1:階乗】の機能を含んでいることはわかりますから この二つを統一してみます。そのとき、 >>> テキストボックスに入力した二つの数値から様々な計算をして出力するフォーム』 と言う所を考慮してみました。 ・ 入力は、2番目のが空のときがあるので、その対応をする。 ・ 呼び出すときに、配列calcsのインデックスを指定して、値をセットする。 以上を考慮し、関数f2()を作ってみました。 -------------------------------------------------------------------------------- <html> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title></title> <script language="JavaScript" type="text/javascript"> <!-- var valA = 5; var valB = 0; var calcs = Array() ; function f2(index) { if (valB==0 && valA==0) { calcs[index] ="不正"; return; } if (valB==0) { valB=valA; valA=1; } else if (valB < valA || valA<1) { calcs[index] ="不正"; return; } var ab = 1; for (var aa = valA; aa <= valB; aa++) { ab *= aa; } calcs[index] = ab; } function check(){ index=6; f2(index); alert(calcs[index]); } //--> </script> </head> <body onload="check()"> </body>
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
多少危険ですが、再帰的な処理をしてみるとか? <SCRIPT language="JavaScript"> function calc(x,y) { if(y<=x) return x; return y * calc(x,y-1); } document.write(calc(3,7)); </SCRIPT>
お礼
ありがとうございます。 『多少危険』の意味すら分からないのでもっと勉強してからにします。
お礼
ありがとうございます。 説明が下手なせいでなんだか余分なことを考えさせてしまったようで申し訳ありません。