首页 > 解决方案 > 如何制作一个输出两个数字的阶乘比率(N!/ M!)的脚本?

问题描述

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

    $n = 5;
    $factorial = 1;

    function fact($n)
   { 
       for ($i = 1; $i <= $n; $i++) {
           $factorial *= $i;
       }
   }
   echo $factorial;

但是,我怎样才能找到两个数字的阶乘之比(N! / M!)

标签: phpmath

解决方案


嗯,这可能是你用@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 )

推荐阅读