views:

46

answers:

1

I've adapted this from an example that I found on the 'net...

function ratio($a, $b) {
    $_a = $a;
    $_b = $b;

    while ($_b != 0) {

        $remainder = $_a % $_b;
        $_a = $_b;
        $_b = $remainder;   
    }

    $gcd = abs($_a);

    return ($a / $gcd)  . ':' . ($b / $gcd);

}

echo ratio(9, 3); // 3:1

Now I want it to use func_get_args() and return the ratios for multiple numbers. It looks like a recursive problem, and recursion freaks me out (especially when my solutions infinitely loop)!

How would I modify this to take as many parameters as I wanted?

Thanks

+2  A: 

1st, try this gcd function http://php.net/manual/en/function.gmp-gcd.php Or else you must define a gcd function like

function gcd($a, $b) {
    $_a = abs($a);
    $_b = abs($b);

    while ($_b != 0) {

        $remainder = $_a % $_b;
        $_a = $_b;
        $_b = $remainder;   
    }
    return $a;
}

Then modify the ratio function

function ratio()
{
    $inputs = func_get_args();
    $c = func_num_args();
    if($c < 1)
        return ''; //empty input
    if($c == 1)
        return $inputs[0]; //only 1 input
    $gcd = gcd($input[0], $input[1]); //find gcd of inputs
    for($i = 2; $i < $c; $i++) 
        $gcd = gcd($a, $input[$i]);
    $var = $input[0] / $gcd; //init output
    for($i = 1; $i < $c; $i++)
        $var .= ':' . ($input[$i] / $gcd); //calc ratio
    return $var; 
}
Bang Dao
Thanks! Is GMD installed on most PHP installations?
alex