return 1; } if ($n === $r) { return fac($n); } if ($n <= $r) { die('Total number of items must be greater than number of items taken' . PHP_EOL); } return fac($n) / fac($n - $r); } function nCk($n, $k) { if ($n === 0) { die('Total number of items cannot be 0.'); } if ($n < $k) { die('Number of items taken cannot be greater than total number of items.'); } if ($k == 0) { return $n; } return fac($n) / (fac($n - $k) * fac($k)); } for ($i = 1; $i < $argc; ++$i) { echo "{$argv[$i]}! = " . fac($argv[$i]) . PHP_EOL; if ($i % 2 === 0) { $j = $i - 1; echo "There are " . nPr($argv[$j], $argv[$i]) . " Permutations for {$argv[$i]} from {$argv[$j]}" . PHP_EOL; echo "There are " . nCk($argv[$j], $argv[$i]) . " Combinations for {$argv[$i]} from {$argv[$j]}" . PHP_EOL; } }
function nPr($n, $r) { if ($r > $n) { return NaN; } if ($r) { return $n * nPr($n - 1, $r - 1); } else { return 1; } }