3

我想编写一个函数来检查随机数是否等于前一个随机数并返回一个不等于前一个的新随机数。我想使用递归来做到这一点,但我不确定这是否是正确的语法。

function newNumber(next,previous) {
    if (next != previous)
        return next;
    else {
        next = Math.floor(Math.random()*10);
        newNumber(next, previous);
    }
}

让它发挥作用的最佳方法是什么?

4

4 回答 4

7

我会完全放弃递归。只需将最后一个随机数存储为函数本身的属性,下次用户想要一个随机数时,只需返回您计算的与上一个不同的第一个随机数。

就像是 -

function newNumber() {
    var nextValue;
    while ((nextValue = Math.floor(Math.random()*10)) === newNumber.previous) ;

    newNumber.previous = nextValue;
    return nextValue;
}
于 2013-06-02T06:13:19.803 回答
3

关闭方式:

var newNumber = (function () {
    var previous;

    return function () {
        var nextValue;
        while ((nextValue = Math.floor(Math.random() * 10)) === previous);

        previous = nextValue;
        return nextValue;
    };
})();

小提琴

于 2013-06-02T06:21:06.613 回答
3

你不需要递归。实际上,您甚至不需要循环。只需从不是前一个数字的数字中选择一个随机数:

function newNumber(previous) {
  var next = Math.floor(Math.random()*9);
  if (next >= previous) next++;
  return next;
}
于 2013-06-02T06:28:17.530 回答
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);
    }
}
于 2013-06-02T06:12:33.830 回答