2013-06-12 53 views
0

我期待生成一系列隨機數,它們與先前生成的數相差至少2。我認爲,一個簡單的函數,會叫自己將要走的路 - 見下面的代碼...用於生成至少有兩個不同的隨機數的函數

function getRandomLength($previous){ 
    $x = rand(1,12); 

    if(abs($x - $previous) > 2){ 
     return $x; 
    } else { 
     getRandomLength($previous); 
    } 
} 

無論出於何種原因,這是行不通的,我有一些希望的那樣的方式。任何幫助,將不勝感激。

謝謝。

對於那些想知道爲什麼我需要稍微不同的隨機數的人,我正在構建一個套牌。我需要削減裝飾板,我不希望聯合排隊,或有任何可感知的模式,因此,我轉向我可靠的隨機數發生器來幫助...

+0

一個簡單的解決方案:乘2 – Mene

+0

請說明它在做什麼,以及它應該做的事... –

+0

有一件事是錯誤肯定的是,你不回你的遞歸函數調用的價值。試試'else {return getRandomLength($ previous);' –

回答

1

兩個問題在這裏:

function getRandomLength($previous){ 
    $x = rand(1,12); 

    if(abs($x - $previous) > 2){ 

第一個問題是在這裏 - 你使用> 2當你的意思是>= 2,例如如果差異是兩個或更多,那麼很好。

 return $x; 
    } else { 
     getRandomLength($previous); 

第二個問題是在這裏 - 你再次調用該方法,但你不回調用它的結果,因此該方法的結果將是未有用null

此外,你不應該編碼方法是遞歸的,它應該是迭代的,因爲它不需要遞歸邏輯。

} 
} 
+0

添加返回到else語句修復它。 – bcsmith

+0

> 2是好的,我不明白你爲什麼認爲OP意味着> 1。不返回遞歸調用肯定是錯誤的;同意迭代解決方案要簡單得多。 –

+0

@Juan Mendes簡單。 OP的願望是返回至少爲2的不同的隨機數.3與1至少有2個不同。abs(3-1)是2. 2不是> – Patashu

-1

因爲你需要一個至少爲2的偏移量,從0開始隨機選擇一個並添加2。既然它是一個偏移量,你可以將它添加到以前的值(但我相信你可以弄清楚)。

+0

rand();結果:5. +2 = 7 rand();結果:5 + 2 = 7 ...相等! –

+0

@StefanoL:你*可以*告訴7和14不相等,對吧? –

+0

我已經讀過「將它添加到以前的值」的東西,我猜 –