问题描述
$n = 5;
$factorial = 1;
function fact($n)
{
for ($i = 1; $i <= $n; $i++) {
$factorial *= $i;
}
}
echo $factorial;
但是,我怎样才能找到两个数 (N! / M!)
的阶乘之比?
解决方法
呃,这可能是你在@Kyoto 的回答中做的很多不必要的数学运算。
// return N!/M!
function factorial_ratio($n,$m) {
if( $n == $m ) {
return 1;
} else if( $n > $m ) {
return partial_factorial($n,$m+1);
} else {
return 1 / partial_factorial($m,$n+1);
}
}
function partial_factorial($begin,$end) {
if( ! $begin > $end ) {
throw new \Exception("Begin must be larger than end");
}
$out = $begin;
for( $f=$begin-1; $f>=$end; --$f ) {
$out *= $f;
}
return $out;
}
var_dump(factorial_ratio(123456789,123456788));
输出:[在 20 毫秒内]
int(123456789)
例如:
( 1 * 2 * 3 * 4 * 5 ) / ( 1 * 2 * 3 ) == ( 4 * 5 )
,
你可以在你的函数中添加一个 return 并调用她 2 次:
$n = 5;
$m = 2;
function fact(Int $n) : Int{
$factorial = 1;
for ($i = 1; $i <= $n; $i++) {
$factorial *= $i;
}
return $factorial;
}
$factorialOfTwoNumbers = fact($n) / fact($m);