2015-09-27 78 views
-1

我似乎無法得到這個重複,只要過去和當前是相同的(這是一個新的報價生成器)。JS遞歸函數問題

function random() { // random number 0-9 
     var number = Math.floor(Math.random() * 9); 
     return number; 
    } 

    var past = [0];  // array of past quotes 

    function writer() { // on button click for new random quote 
     var current = random(); 
     past.push(current); 
     function checker() { 
     if (past[past.length - 2] === past[past.length - 1]) { 
      current = random(); 
      checker(); 
     } 
     } 
     checker(); 
    } 
+2

對你的'隨機'函數的評論是錯誤的,它返回0..8。無論如何,這種暴力方法有什麼原因嗎?用一個可能的答案填充一個數組可能更容易,隨機選擇一個數組,然後將其從數組中移除以用於下一次迭代。 – usr2564301

+0

感謝隨機()捕獲,雖然這肯定會起作用,但我也很好奇我做錯了什麼。除此之外,沒有任何真正的理由讓暴力行爲成爲我喜歡的方式。 –

+0

啊 - 你正在改變'current',但是這不會改變你的數組中的值。 'past.push(current)'這行會立即推送*值*,然後忘記它來自哪裏。因此,改變'current'後不會自動改變其上一次推送的值。 – usr2564301

回答

0

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