возвращаемое значение в простой рекурсии - PullRequest
1 голос
/ 21 июня 2020

Я хочу сгенерировать случайное целое число. Чтобы проверить, что он еще не сгенерирован, я хочу добавить его в массив, и в следующий раз при генерации нового целого числа я хочу проверить, существует ли оно в массиве, если он существует, затем сгенерировать снова (пока он не сгенерирует некоторые целое число, которое не существует), а затем вернуть целое число.

Я пытаюсь использовать следующую функцию рекурсии, но рекурсия работает неправильно (когда она генерирует существующее число, тогда есть проблема).

var ids = [];

function generateID() {

  var newID = Math.floor(Math.random() * 6) + 1;  //small range for test
   
  if( jQuery.inArray(newID, ids) == -1 ) {
        
      ids.push(newID);     
      
      return newID;  //is it correct to return from here?
      
  } else {
    //problem part
    console.log(newID + " exists");
    generateID();    
  }  

}

function getID() {

    var i = generateID();
    console.log(i);

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<button onclick="getID();" >Generate ID</button>

1 Ответ

1 голос
/ 21 июня 2020

Вам просто нужно вернуть результат generateId и в другом случае. Также вы можете просто использовать метод Array.includes, чтобы узнать, существует ли что-то в массиве.

var ids = [];

function generateID() {

  var newID = Math.floor(Math.random() * 6) + 1; //small range for test

  if (!ids.includes(newID)) {
    ids.push(newID);
    return newID;
  } else {
    console.log(newID + " exists");
    return generateID();
  }
}

function getID() {
  var i = generateID();
  console.log(i);
}
<button onclick="getID();">Generate ID</button>

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...