微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何制作一个输出两个数字的阶乘之比的脚本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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。