下面的代码包含一个递归方法,该方法应始终返回7,但是每当必须重新生成一个数字时,它都会返回undefined,因为生成的数字已经包含在代码顶部定义的数组中。

我的问题是...为什么会发生这种情况,我该如何解决?

var id = [1,2,3,4,5,6];

function generatePlayerId(){
  var check = false;
  var tempId = Math.floor(Math.random()*7)+1;
  for(var i=0;i<id.length;i++){
    if(tempId == id[i]){
      check = true;
    }
  }
  if(check){
    console.log(tempId);
    generatePlayerId();
  }else{
    console.log(tempId);
    return tempId;
  }
}

var num = generatePlayerId();

console.log(num);

最佳答案

在递归的情况下,您也要返回。这将使基本情况能够返回通过之前进行的所有递归调用生成的值。

尝试这个:

var id = [1,2,3,4,5,6];

function generatePlayerId(){
  var check = false;
  var tempId = Math.floor(Math.random()*7)+1;
  for(var i=0;i<id.length;i++){
    if(tempId == id[i]){
      check = true;
    }
  }
  if(check){
    console.log(tempId);
    return generatePlayerId();
  }else{
    console.log(tempId);
    return tempId;
  }
}

var num = generatePlayerId();

console.log(num);

09-19 02:42