php - 如何制作一个输出两个数字的阶乘比率(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 )
推荐阅读
- powershell - 如何检查特定文件是否在文件夹中并写入主机是否存在
- google-maps - 由圆圈组成的谷歌地图多边形
- c++ - Vscode C/C++ 调试器控制台实现
- github-actions - Github Renovate company/package not found composer with auth.json composer
- python-3.x - 使用 Python 请求库进行 Web 抓取,给出 429 客户端错误
- android - 为 kotlin dsl 生成 pom.xml
- javascript - 如何强制用户一一选择选项?
- javascript - 如何输入 createElement DOM 函数的选项?
- ios - 在 mapkit 中选择备用路线的问题
- python - 从 sql 视图获取数据帧的最快方法是什么?