我希望生成一系列随机数,这些数字与之前生成的数字相差至少2。我认为一个简单的函数可以自行调用 - 请参阅下面的代码......
function getRandomLength($previous){
$x = rand(1,12);
if(abs($x - $previous) > 2){
return $x;
} else {
getRandomLength($previous);
}
}
无论出于何种原因,这并不像我希望的那样。任何帮助将不胜感激。
感谢。
对于那些想知道为什么我想要稍微不同的随机数字的人,我正在构建一个套牌。我需要切割装饰板,我不希望关节排成一行,或者对它们有任何可感知的模式,因此,我转向我可靠的随机数发生器来帮助...
答案 0 :(得分:1)
这里有两个问题:
function getRandomLength($previous){
$x = rand(1,12);
if(abs($x - $previous) > 2){
首先出现问题 - 当您的意思是> 2
时使用>= 2
,例如如果差异是两个或更多,则没关系。
return $x;
} else {
getRandomLength($previous);
第二个问题在这里 - 你再次调用该方法,但是你没有返回调用它的结果,因此该方法的结果将是一个无用的null
。
此外,您不应该将方法编码为递归,它应该是迭代的,因为它不需要递归逻辑。
}
}
答案 1 :(得分:-1)
由于您需要至少为2的偏移量,因此从0开始选择一个随机数并将其加2。由于它是一个偏移量,你将它添加到之前的值(但我相信你可以想出来)。