I am looking to generate a series of random numbers that have a difference of at least 2 from the previous number that was generated. I thought that a simple function that would call itself would be the way to go - see code below...
function getRandomLength($previous){
$x = rand(1,12);
if(abs($x - $previous) > 2){
return $x;
} else {
getRandomLength($previous);
}
}
For whatever reason, this is not working out the way that I had hoped it would. Any help would be appreciated.
Thanks.
And for those wondering why I want random numbers that are slightly different, I'm building a deck. I need to cut the decking boards and I don't want the joint to line up, or have any perceivable pattern to them, hence, I turn to my trusty random number generator to help out...
Two problems here:
function getRandomLength($previous){
$x = rand(1,12);
if(abs($x - $previous) > 2){
First problem is here - you use > 2
when you meant >= 2
, e.g. if the difference is two or more then it's fine.
return $x;
} else {
getRandomLength($previous);
Second problem is here - you call the method again, but you do not return the result of calling it, so the result of the method will be an un-useful null
.
Also, you should not code the method to be recursive, it should be iterative, as it doesn't need recursive logic.
}
}
Since you need an offset of at least 2, pick a random number starting from 0 and add 2 to it. Since it's an offset, you add it to the previous value (but I'm sure you could figure that out).