下面的代码包含一个递归方法,该方法应始终返回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);