Javascript JS递归函数问题

Javascript JS递归函数问题,javascript,function,recursion,Javascript,Function,Recursion,无论过去和现在是一样的(这是一个新的报价生成器),我似乎都无法让它重复 Rekursiv geht meistens schief(很抱歉没有英语) 如果条件为真,则未更改最后一个值: var past = [-1]; // impossible value; function writer() { // on button click for new random quote var current = random(); // get a first random pa

无论过去和现在是一样的(这是一个新的报价生成器),我似乎都无法让它重复

Rekursiv geht meistens schief(很抱歉没有英语)

如果条件为真,则未更改最后一个值:

var past = [-1]; // impossible value;

function writer() { // on button click for new random quote
  var current = random();       // get a first random
  past.push(current);           // add this to past array
  function checker() {
                                // check last two values
    if (past[past.length - 2] === past[past.length - 1]) {
      current = random();       // if equal, get a new random;
      checker();                // re-call - BUT -
                                // as there' actually no change to past,
                                // we're in an infinite loop.
    }                           
  }
  checker();
}
更改:

var past = [-1]; // impossible value;

function writer() { // on button click for new random quote
  var current = random();       // get a first random
  past.push(current);           // add this to past array
  function checker() {
                                // check last two values
    if (past[past.length - 2] === past[past.length - 1]) {
      current = random();       // if equal, set a new random even to past
      past[past.length - 1] = current;
      checker();                // re-call 
    }                           
  }
  checker();
}

random
函数上的注释错误,它返回0..8。不管怎样,这种暴力手段有什么原因吗?用可能的答案填充数组可能更容易,随机选择一个,然后在下一次迭代中将其从数组中删除。感谢random()捕获,虽然这肯定会起作用,但我也很好奇我做错了什么。除了我喜欢的滚动方式之外,没有任何理由使用蛮力。啊–您正在更改当前的
但这不会更改数组中的值。行
pass.push(current)
立即推送它的值,然后忘记它来自哪里。因此,之后更改当前值不会自动更改其上次按下的值。
var past = [-1]; // impossible value;

function writer() { // on button click for new random quote
  var current = random();       // get a first random
  past.push(current);           // add this to past array
  function checker() {
                                // check last two values
    if (past[past.length - 2] === past[past.length - 1]) {
      current = random();       // if equal, set a new random even to past
      past[past.length - 1] = current;
      checker();                // re-call 
    }                           
  }
  checker();
}