Heim  >  Artikel  >  Web-Frontend  >  Wie generiert man in JavaScript nicht wiederkehrende Zufallszahlen ohne Rekursion?

Wie generiert man in JavaScript nicht wiederkehrende Zufallszahlen ohne Rekursion?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-20 08:02:29534Durchsuche

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

Generieren sich nicht wiederholender Zufallszahlen in JavaScript

Das Generieren einer Folge sich nicht wiederholender Zufallszahlen kann in JavaScript eine Herausforderung sein. Hier ist eine Aufschlüsselung eines repräsentativen Problems und seiner Lösung.

Das Problem:

Der bereitgestellte Code versucht, sich nicht wiederholende Zufallszahlen zu generieren, indem er mit einem Array zuvor verglichen wird generierte Zahlen. Dieser Ansatz löst jedoch aufgrund rekursiver Funktionsaufrufe einen Stapelüberlauffehler aus.

Die beste Lösung:

Anstelle kontinuierlicher rekursiver Funktionsaufrufe sollten Sie erwägen, ein gemischtes Array von zu generieren Zahlen am Anfang. Dieser Ansatz stellt sicher, dass jede Nummer nur einmal generiert wird. Hier ist ein Fisher-Yates-Shuffle, der dies effizient erreicht:

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

  while (i--) {
    j = Math.floor(Math.random() * (i + 1));
    temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }

  return array;
}

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

Diese Technik vermeidet kostspielige Array-Operationen, indem Elemente direkt innerhalb des ursprünglichen Arrays ausgetauscht werden.

Eine weitere Alternative:

Für Browser mit Generatorunterstützung können Sie die folgende Generatorfunktion verwenden:

<code class="javascript">function* shuffle(array) {
  let i = array.length;

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

let ranNums = shuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);

ranNums.next().value; // first random number from array
ranNums.next().value; // second random number from array
// etc.</code>

Durch die Verwendung von Ergebniswerten verzögert dieser Ansatz Array-Vorgänge, bis sie tatsächlich erforderlich sind, was ihn effizienter macht bestimmte Anwendungsfälle. Welche Methode Sie auch wählen, diese Lösungen generieren effektiv sich nicht wiederholende Zufallszahlen in JavaScript.

Das obige ist der detaillierte Inhalt vonWie generiert man in JavaScript nicht wiederkehrende Zufallszahlen ohne Rekursion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn