如何利用一个小范围随机数生成一个大范围的随机数
用一个5以内的随机数函数生成一个7以内的随机数函数
1 | var rand5 = () => ~~(Math.random()*5) // 利用这个函数生成5以内的随机数 |
这题的解题思路很简单, 只要利用这个函数生成一个平均分布的范围大于7的随机数就可以了
1 | var rand7 = function() { |
延伸: 如何利用一个小范围随机数生成一个大范围的随机数
重点在于如何保证随机数的平均分布
从rand5()*5 + rand5()
可以看出实现的原理是先生成一个[5,10,15,20,25]间隔为5的随机数组后再使用一个随机数去填充这个数组, 那么对于更大范围的数比如一个大于25的数, 就需要rang5()*5*5+rand5()*5+rand5()
得到一个区间是 31~155 总的范围长度为125的数组
所以只需要递归获得一个大于范围的数组长度, 就可以得到一个由小范围随机数生成的大范围随机数, 具体代码就不贴出来了, 有兴趣可以自己实现一下
1 | // 这里给出一个我偶然想到的阶乘 |