2013-10-31 40 views
0

我有以下PHP代碼,它使用rand()產生隨機數並且不確定直到max int,一個跟蹤已使用數字的會話是否有重複。如果隨機數較大,最大速度不應該太高以至於不會出現問題,並且這種方式目前效果不錯。 HOWERVER ...雖然看起來還在工作,但沒有返回值

function random($min,$max) { 
    if(count($_SESSION["randoms"])==5) { 
     unset($_SESSION["randoms"]); 
    } 
    $rand = rand($min,$max); 
    echo "Chosen Random: $rand<br>"; 
    if(@in_array($rand,$_SESSION["randoms"]) && count($_SESSION["randoms"])!=0) { 
     echo "<strong>In Array: </strong>Do It Again<br>\n"; 
     random($min,$max); 
    } 
    else { 
     echo "<strong>All Good </strong> Return $rand as number and include in array!<br>\n"; 
     $_SESSION["randoms"][] = $rand; 
     return $rand; 
    } 
} 

我在那裏有幾個回聲塊來幫助調試。一切正常,但是當遞歸調用random時,它會繼續執行,直到它找到一個不在數組中的數字並且回顯「All Good」並將其添加到數組中,但不會返回它。如果數字不在數組中,則返回它很好。我很困惑,爲什麼它會回顯「All Good」並將其添加到數組中,但不會將其返回到腳本的其餘部分中使用。

回答

1

您的遞歸實現是錯誤的。你的回報正在遞歸調用的價值,但接下來呢?現在回過頭來返回最終結果。

順便說一句複雜的遞歸算法更多。 你也可以用do來執行這個任務。

function random($min,$max) { 
if(count($_SESSION["randoms"])==5) { 
    unset($_SESSION["randoms"]); 
} 
do{ 
    $rand = rand($min,$max); 

}while(@in_array($rand,$_SESSION["randoms"])); 

$_SESSION["randoms"][] = $rand;   
return $rand; 

}

我沒有測試它的權利,但我就是這樣常常做到這一點。

+0

儘管我沒有使用你的例子,並且能夠修改我的''rand = random($ min,$ max);'遞歸,然後在我的if語句之外我放置了返回值,她工作像一個魅力。這是你的評論,幫助我看到我做錯了!謝謝! –

相關問題