js实现的递归算法,字段长度为5,元素随机数为2-32之间的非重复值
文章标签
JavaScript
问题
这是一个大题,考点分为4个小项;侯选人需要使用递归算法来实现(限15行代码完成;限时10分钟内完成)
- 生成长度为 5 的空数组 arr。
- 生成 (2-32) 之间的随机整数。
- 在arr字段中放入rand随机数。如果arr中已经存在与rand相同的数字,则生成随机rand数并放入arr中【需要递归实现,不能使用for/while循环】
- 最后写入长度为5、不重复内容的数组arr。
我的实现方法
函数 randomNumber(arr){ var value = Math.floor(Math.random()*31+2); if(~arr.findIndex(item=>item==value))return randomNumber(arr); 返回值; } 函数 nArr(长度,arr){ var arr = typeof arr== '未定义'? new Array(length):arr; var index = arr.findIndex(item=>item==undefined); if(!~index) 返回 arr arr[索引]=随机数(arr); 返回 nArr(长度,arr); }
从错误中学习
Math.floor(Math.random()*31+2);这个写法不严谨,我学会了(●'◡'●)
要获取范围值,您应该这样写:
Math.floor(Math.random() * (max - min + 1)) + min;
原因如下:
//生成2 - 5范围内的随机数 变量最小值 = 2,最大值 = 5; var 结果 = Math.max(min, Math.ceil(Math.random() * max));// 参数一 p1 始终等于 2 // 参数两个p2在[0, 5]之间具有相同的值 // 请参阅下面的选项 //p1 2 2 2 2 2 2 // p2 0 1 2 3 4 5 // 结果 2 2 2 3 4 5
可见结果2的概率大于3/4/5。
其他人实现目标的方法
看到了一个比较优雅的代码,代码实现是这样的:
//完成6行 函数 buildArray(arr, 长度, 最小值, 最大值) { var num = Math.floor(Math.random() * (max - min + 1)) + min; if (!arr.includes(num)) { arr.push(num); } 返回 arr.length === 长度 ? arr : buildArray(arr, 长度, 最小值, 最大值); } var 结果 = buildArray([], 5, 2, 32); console.table(结果);
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
上一篇:js 删除字符中的所有空格, 下一篇:JavaScript:在函数前添加加号(+)
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。