简体   繁体   English

使用 PHP 的阶乘分数

[英]Factorial Fraction using PHP

Can someone explain to me how we can get the factorial of fractional numbers using functions?有人可以向我解释我们如何使用函数获得小数的阶乘吗? A result like this像这样的结果


1! + 2 / 2! + 3 / 3! + ....... + 10/10!

double dp memos, pay special attention to number overflow in PHP双dp备忘录,特别注意PHP中的数字溢出

<?php
/*
f(1) = 1/1! = 1
f(2) = 2/2! + 1/1! = 2/2*1 + f(1) = 1 + 1
f(3) = 3/3! + 2/2! + 1/1! = 3/3*2*1 + f(2) = 1/2! + f(2)
...
f(n) = n/n! + f(n-1) = 1/(n-1)! + f(n-1) (n>=3)
calc for f(n)
*/
function f(int $n, &$memo2, &$memo) {
    if ($n <= 0) {
        return;
    }
    return memo_2($memo2, $memo, $n);
}

/*
memo for f(n)
*/
function memo_2(&$memo2, &$memo, int $n) {
    if ($n == 1) {
        return 1;
    }
    if (isset($memo2[$n])) {
        return $memo2[$n];
    }
    $ret = $memo2[$n] = 1/factorial($n - 1, $memo) + memo_2($memo2, $memo, $n - 1);
    return $ret;
}

/*
calc for n!
*/
function factorial(int $n, &$memo) {
    if ($n == 1) {
        return 1;
    } else {
        return memo_1($memo, $n);
    }
}

/*
memo for n!
*/
function memo_1(&$memo, int $n) {
    if ($n == 1) {
        return 1;
    }
    if (isset($memo[$n])) {
        return $memo[$n];
    }
    $ret = $memo[$n] = $n * memo_1($memo, $n - 1);
    return $ret;
}

$memo = $memo2 = [];
echo f(3, $memo2, $memo).PHP_EOL;
echo f(10, $memo2, $memo).PHP_EOL;
echo f(8, $memo2, $memo).PHP_EOL;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM