Я адаптировал это из примера, который я нашел в сети …
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
Теперь я хочу, чтобы он использовал func_get_args()
и возвращал коэффициенты для нескольких чисел. Это похоже на рекурсивную проблему, и рекурсия меня измучает (особенно когда мои решения бесконечно петля)!
Как мне изменить это, чтобы взять столько параметров, сколько я хотел?
благодаря
1, попробуйте эту функцию gcd http://php.net/manual/en/function.gmp-gcd.php. Или вы должны определить функцию gcd, например
function gcd($a, $b) { $_a = abs($a); $_b = abs($b); while ($_b != 0) { $remainder = $_a % $_b; $_a = $_b; $_b = $remainder; } return $a; }
Затем измените функцию отношения
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($gcd, $input[$i]); $var = $input[0] / $gcd; //init output for($i = 1; $i < $c; $i++) $var .= ':' . ($input[$i] / $gcd); //calc ratio return $var; }