Я знаю, что этот вопрос существует во многих обличьях, но я не смог найти ответ, связанный с моей конкретной проблемой эффективности.
У меня есть код ниже, который работает отлично.
У меня есть 10 массивов элементов, из которых я случайно выбираю элемент (при нажатии клавиши ввода). Код хранит массив из 5 самых последних выборов, которые не могут быть выбраны случайным образом (чтобы избежать слишком много повторений с течением времени).
Если функция selectName() изначально выбирает имя, которое использовалось в последних 5, оно просто ломается и снова вызывает себя, повторяя, пока не найдет "уникальное" имя.
У меня есть два вопроса:
-
Можно ли сказать, что это "рекурсивная функция"?
-
Я обеспокоен тем, что теоретически это может продолжаться в течение длительного времени, прежде чем найти уникальное имя - есть ли более эффективный способ сделать это?
Спасибо за любую помощь.
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);