我想编写一个函数,检查随机数是否等于前一个随机数,并返回一个不等于前一个随机数的新随机数。我想使用递归来做这个,但我不确定这是否是正确的语法。
function newNumber(next,previous) {
if (next != previous)
return next;
else {
next = Math.floor(Math.random()*10);
newNumber(next, previous);
}
}
让这个工作的最佳方式是什么?
答案 0 :(得分:7)
我会完全放弃这个递归。只需存储最后一个随机数作为函数本身的属性,并在下次用户想要一个随机数时,只返回您计算的第一个与最后一个不同的数。
像 -
function newNumber() {
var nextValue;
while ((nextValue = Math.floor(Math.random()*10)) === newNumber.previous) ;
newNumber.previous = nextValue;
return nextValue;
}
答案 1 :(得分:3)
关闭方式:
var newNumber = (function () {
var previous;
return function () {
var nextValue;
while ((nextValue = Math.floor(Math.random() * 10)) === previous);
previous = nextValue;
return nextValue;
};
})();
答案 2 :(得分:3)
你不需要递归。实际上你甚至不需要循环。只需从不是前一个数字的数字中选择一个随机数:
function newNumber(previous) {
var next = Math.floor(Math.random()*9);
if (next >= previous) next++;
return next;
}
答案 3 :(得分:1)
只需将return
添加到newNumber(next, previous);
块中的else
即可。代码就像这样:
function newNumber(next,previous) {
if (next != previous)
return next;
else {
next = Math.floor(Math.random()*10);
return newNumber(next, previous);
}
}