我知道这个问题以多种形式存在,但我未能找到一个关于效率的特定答案。
我有以下代码,它能正常运行。
我有一个包含10个项目的数组,从中随机选择一个项目(按enter键)。该代码保留最近5个选择的项目的数组,这些项目不能被随机选中(以避免长时间重复)。
如果chooseName()函数最初选择了在最近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);