Maison > interface Web > js tutoriel > le corps du texte

Comment générer des nombres aléatoires non répétitifs en JavaScript sans récursion ?

Patricia Arquette
Libérer: 2024-10-20 08:02:29
original
533 Les gens l'ont consulté

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

Générer des nombres aléatoires non répétitifs en JavaScript

Générer une séquence de nombres aléatoires non répétitifs peut être un défi en JavaScript. Voici une description d'un problème représentatif et de sa résolution.

Le problème :

Le code fourni tente de générer des nombres aléatoires non répétitifs en vérifiant par rapport à un tableau de nombres précédemment nombres générés. Cependant, cette approche déclenche une erreur de débordement de pile en raison d'appels de fonction récursifs.

La meilleure solution :

Au lieu d'appels de fonction récursifs continus, envisagez de générer un tableau mélangé de chiffres au départ. Cette approche garantit que chaque numéro n'est généré qu'une seule fois. Voici un Fisher-Yates Shuffle qui y parvient efficacement :

<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>
Copier après la connexion

Cette technique évite les opérations coûteuses sur les tableaux en échangeant des éléments directement dans le tableau d'origine.

Une autre alternative :

Pour les navigateurs prenant en charge le générateur, vous pouvez utiliser la fonction de générateur suivante :

<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>
Copier après la connexion

En utilisant les valeurs générées, cette approche retarde les opérations de tableau jusqu'à ce qu'elles soient réellement requises, ce qui la rend plus efficace pour certains cas d'utilisation. Quelle que soit la méthode que vous choisissez, ces solutions génèrent efficacement des nombres aléatoires non répétitifs en JavaScript.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!