Home > Enterprise >  Recursive function that returns array with random X values
Recursive function that returns array with random X values

Time:10-13

Is there any way I can write a function that only takes $size as an argument and returns an array with $size random values?

My approach so far using an initial array as parameter:

function rand_vector (array $arr, int $size): array {
    if (count($arr) == $size) return $arr;
    array_push($arr, random_int(0, 30));
    return rand_vector ($arr, $size);
}

CodePudding user response:

If recursion is not required, you could create a one-liner where you give a max value and a count.

$randomSize = fn($size, $max) => array_map(fn($max) => random_int(0, $max), range(1, $size));

print_r($randomSize(20, 10));

Output

20 values from 0-10

Array
(
    [0] => 0
    [1] => 1
    [2] => 3
    [3] => 4
    [4] => 2
    [5] => 0
    [6] => 4
    [7] => 0
    [8] => 2
    [9] => 7
    [10] => 7
    [11] => 3
    [12] => 10
    [13] => 4
    [14] => 8
    [15] => 1
    [16] => 3
    [17] => 5
    [18] => 10
    [19] => 3
)

CodePudding user response:

Instead of comparing the input array to $size for the base case, use $size=0 as the base. Then you subtract 1 from $size when making the recursive calls. The function then generates one random number and pushes it onto the array returned by the recursive call.

function rand_vector(int $size): array {
    if ($size == 0) {
        return [];
    }
    $temp = rand_vector($size-1);
    $temp[] = random_int(0, 30);
    return $temp;
}
  • Related