>웹 프론트엔드 >JS 튜토리얼 >재귀 없이 JavaScript에서 반복되지 않는 난수를 생성하는 방법

재귀 없이 JavaScript에서 반복되지 않는 난수를 생성하는 방법

Barbara Streisand
Barbara Streisand원래의
2024-10-20 08:03:29410검색

How to Generate Non-Repeating Random Numbers in JavaScript without Recursion

JavaScript에서 반복되지 않는 난수 생성

이 작업의 목표는 지정된 범위 내에서 반복되지 않는 일련의 난수를 생성하는 것입니다. 한 가지 접근 방식은 생성된 각 번호를 이전에 생성된 번호 목록과 비교하는 것입니다. 그러나 이 방법은 과도한 재귀로 인해 "RangeError"가 발생할 수 있습니다.

더 나은 해결책은 원하는 숫자의 무작위 순열을 미리 생성하는 것입니다. 이는 다양한 기술을 사용하여 달성할 수 있습니다:

무작위 순열

<code class="javascript">var nums = [1,2,3,4,5,6,7,8,9,10],
    ranNums = [],
    i = nums.length,
    j = 0;

while (i--) {
    j = Math.floor(Math.random() * (i+1));
    ranNums.push(nums[j]);
    nums.splice(j,1);
}</code>

이 알고리즘은 숫자의 무작위 순서를 생성합니다. 범위를 제한하거나 짝수를 지정하려는 경우 그에 따라 숫자를 수정할 수 있습니다.

Fisher-Yates Shuffle

<code class="javascript">function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {

        j = Math.floor(Math.random() * (i+1));

        // swap randomly chosen element with current element
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;

    }

    return array;
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);</code>

Fisher-Yates Shuffle은 무작위보다 더 효율적인 대안입니다. 값비싼 배열 작업의 사용을 방지하는 순열 방법입니다.

생성기

<code class="javascript">function* shuffle(array) {

    var i = array.length;

    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0];
    }

}</code>

생성기는 훨씬 더 동적인 옵션을 제공합니다. Yield 및 next 방법을 활용하면 전체 시퀀스를 미리 생성하지 않고도 필요에 따라 섞인 숫자에 액세스할 수 있습니다.

이 접근 방식은 많은 수의 난수가 필요하고 피하려는 경우에 특히 유용합니다. 한꺼번에 기억에 담아두세요.

위 내용은 재귀 없이 JavaScript에서 반복되지 않는 난수를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.