递归算法实现,数组长度为 5 且元素的随机数在 2-32 间不重复的值

拆分问题:

数组长度为 5;
生成 2-32 之间的随机数;
向数组中插入数值时,如果已存在则重新生成;
采用递归的方式,而非循环语句实现。
function getRandom(max, min) {
max = max + 1;
min = min || 0;
return Math.floor(Math.random() * (max - min)) + min;
}

function insertArr(arr, length, min, max) {
if (arr.length < length) {
var value = getRandom(max, min);
console.log('value=' + value);
if (!~arr.indexOf(value)) {
arr.push(value);
}
insertArr(arr, length, min, max);
}
}

var result = [];
insertArr(result, 5, 32, 2);

console.log(result);

一、创建一个长度为5的空数组

var arr = new Array(5);
二、生成一个2-32之间的随机整数

如果是细致的考虑,就需要包括[2,32],(2,32),(2,32],[2,32)四种情况了,请自行解决,我们采用[2, 32]

var rand = Math.floor(Math.random()*(32-2+1) + 2)
三、将生成的随机数arr数组内,且arr内不可存在相同数字

function getNewArr(index,arr){
if(index >= 5){
return false
}
if(!arr.includes(rand)){
arr[index++] = rand
getNewArr(index, arr)
}else{
getNewArr(index, arr)
}
}
getNewArr(0, arr)
console.log(arr)
用object方式替换includes的判断

const getNewArr = function(len){
let arr = new Array(len),index = 0,obj = {};
let rand = Math.floor(Math.random()*(32-2+1)+2);
const pushArr = function(num){
if(index < num){
if(obj[index]){
pushArr(rand)
}else{
arr[index++] = num;
obj[num] = true;
pushArr(rand)
}
}
}
pushArr(rand)
return arr
}
console.log(getNewArr(5))

posted @ 2020-03-26 23:42  东东dillon  阅读(378)  评论(0编辑  收藏  举报