Javascript中的简单递归

时间:2013-06-02 06:10:08

标签: javascript recursion

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

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

让这个工作的最佳方式是什么?

4 个答案:

答案 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;
    };
})();

Fiddle

答案 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);
    }
}