码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-03-27 01:10:38      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:war   floor   包括   数组   and   res   循环   include   max   

拆分问题:

数组长度为 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))

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

标签:war   floor   包括   数组   and   res   循环   include   max   

原文地址:https://www.cnblogs.com/dillonmei/p/12578483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!