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;
    
  • 相关阅读:
    二分查找 找到了返回位置 没找到返回应该插入的位置
    前端知识结构
    RequireJS
    Java内部类——成员内部类
    Java笔记
    Java单例模式
    Java与C#的语法区别(不断更新中...)
    进制转换
    查找算法——折半查找
    排序算法——冒泡排序
  • 原文地址:https://www.cnblogs.com/itbsl/p/9948301.html
Copyright © 2011-2022 走看看