如何制作一个输出两个数字的阶乘之比的脚本N!/M!?

问题描述

我有一个找到 n 阶乘的代码

    $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);