2013-10-31 4 views
0

rand()을 사용하여 난수를 생성하는 다음과 같은 PHP 코드가 있으며 최대 정수 (어떤 숫자가 사용되었는지 추적하는 세션)가있을 때까지 중복이 없음을 확신 할 수 있습니다. 만약 최대치가 너무 크면 속도가 너무 높아져서는 안되며, 만약 랜덤이 크다면 문제가되지 않을 것입니다. 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; 
    } 
} 

디버깅에 도움이되는 몇 개의 에코 블록이 있습니다. 모든 것은 잘 동작하지만 재귀 적으로 무작위가 호출되면 배열에없는 숫자를 찾고 "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 문 외부에서 반환 값을 배치했고 그녀는 작동합니다 매력처럼. 그것은 내가 뭘 잘못했는지 보는데 도움이 된 당신의 의견이었습니다! 감사! –

관련 문제