この質問はさまざまな形で出回っていることは承知していますが、効率に関する私の特定の問題に関する答えを見つけることができませんでした。
私はうまく動作する以下のコードを持っています。
私はランダムにアイテムを選択する10個のアイテム配列を持っています(Enterキーを押すと)。このコードは、ランダムに選択できない最新の 5 つの選択肢の配列を保持します (時間の経過とともに繰り返されることを避けるため)。
chooseName() 関数が最初に最近の 5 回で使用された名前を選択した場合、関数は単純に壊れて再び自分自身を呼び出し、「一意の」名前が見つかるまで繰り返します。
2 つの質問があります。
これは「再帰関数」であると言うのは正しいですか?
理論的には、これが一意の名前を見つける前に長い間ループし続ける可能性があるのではないかと心配しています.これを行うためのより効率的な方法はありますか?
助けてくれてありがとう。
var a = ["Roger", "Russell", "Clyde", "Egbert", "Clare", "Bobbie", "Simon", "Elizabeth", "Ted", "Caroline"];
var b = [];
var chooseName = function () {
var unique = true;
b.length = 5;
num = Math.floor(Math.random() * a.length);
name = a[num];
for (i = 0; i < a.length; i++) {
if (b[i] == name) {
chooseName();
unique = false;
break;
}
}
if (unique == true) {
alert(name);
b.unshift(name);
}
}
window.addEventListener("keypress", function (e) {
var keycode = e.keyCode;
if (keycode == 13) {
chooseName();
}
}, false);