求1!+(1!+3!)+(1!+3!+5!)+...+(1!+3!+5!+7!+9!)的值

Posted itbsl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求1!+(1!+3!)+(1!+3!+5!)+...+(1!+3!+5!+7!+9!)的值相关的知识,希望对你有一定的参考价值。

今天朋友面试时遇到一道算法题,题目要求求出1!+(1!+3!)+(1!+3!+5!)+......+(1!+3!+5!+7!+9!)的值。我个人的思路是需要用到斐波那契阶乘来解决这个问题。
这道题可以分为两步来做,先写出求阶乘的方法,然后我们根据括号就能把上面分组,其实每一组的最大数就是组数*2-1,比如第二组(1!+3!)中的3就是由2 * 3 - 1得来的,第五组(1!+3!+5!+7!+9!)的9就是根据 2 * 5 - 1得来的,并且每一组的结果就是上一组的结果再加上本身最大数的阶乘,所以这里用到了斐波那契。
下面是用php实现的代码:

/**
 * 求一个数n的阶乘
 * @param  int $n 要求阶乘的数n
 * @return int    n!
 */
function factorial($n) {

    if($n <= 1) {
        return 1;
    }
    return $n * factorial($n-1);
}

//有上面的分析,我们要向得到组数就是一组里面最后的那个数+1的结果再除以2就好了
$n = (9 + 1) / 2;

//定义一个arr数组,用来存储每一组的结果,数组的下标代表组数
$arr = [];
$arr[1] = factorial(2*1 - 1);
$arr[2] = factorial(2*2 - 1) + $arr[1];

//斐波那契求每一组的结果
for ($i = 3; $i <= $n; $i++) {
    $arr[$i] = factorial(2*$i - 1) + $arr[$i-1];
}

//定义$result变量存储最终结果
$result = 0;

for($i = 1; $i <= $n; $i++) {
    $result+= $arr[$i];
}

//输出最终结果
echo $result;


以上是关于求1!+(1!+3!)+(1!+3!+5!)+...+(1!+3!+5!+7!+9!)的值的主要内容,如果未能解决你的问题,请参考以下文章

递归的算法求1,1,2,3,5,8.......的第30位数是多少,然后求这些数的和.

练习:求1+2+3+4+5...100的和

求!1+!2+!3+!4+!5 注:!5=1*2*3*4*5; 求用C语言编出来 我学到循环结构 求解 最好写些注释让我容易懂

求(3+开根5) N次方的整数部分最后3位

求解析呀!python中,表达式1,2,3<3,4,5的值为

求1!+2!+3!+....20!的值