zoukankan      html  css  js  c++  java
  • 求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 * 2 - 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;
    
  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/itbsl/p/9948301.html
Copyright © 2011-2022 走看看