求和:1 + 1/2! + 1/3! + 1/4! + 1/5! + ... + 1/50!

递归与迭代求和
本文介绍了一种使用递归和迭代方法计算特定数列和的Java实现。该数列为1+1/2!+1/3!+...+1/50!,通过两种不同算法对比展示了递归和迭代在实际应用中的效率差异。
package com.jnwork;

public class SquenceTest {
	 /** 
     * 求和:1 + 1/2! + 1/3! + 1/4! + 1/5! + ... + 1/50! 
     * @param args 
     */  
    public static void main(String[] args) {  
        System.out.println("递归求和:" + SquenceTest.getSquenceSum(50));  
        System.out.println("迭代求和:" + getSequenceSumByInterator(50));  
    }  
      
    /** 
     * 递归求和 
     * @param n 
     * @return 
     */  
    public static double getSquenceSum(int n) {  
        long startTime = System.currentTimeMillis();  
        if(n == 1) {  
            return 1d;  
        }  
        double sum = 1d;  
        double a = 1d;  
        for(int i = 2; i <= n; i++) {  
            long num = getSquenceValueByRecurvise(i);  
            sum += a / num;  
        }  
        System.out.println("递归求和耗时:" + (System.currentTimeMillis() - startTime) + "ms");//0ms  
        return sum;  
    }  
      
    /** 
     * 递归方式 
     * @param n 
     * @return 
     */  
    public static long getSquenceValueByRecurvise(int n) {  
        if(n == 1) {  
            return 1;  
        }  
        long squenceValue = n * getSquenceValueByRecurvise(n-1);  
        return squenceValue;  
    }  
      
    /** 
     * 迭代求和 
     */  
    public static double getSequenceSumByInterator(int n) {  
        long startTime = System.currentTimeMillis();  
        if(n == 1) {  
            return 1d;  
        }  
        double sum = 1d;  
        double a = 1d;  
        long beforeSeqValue = 1;  
        long nextSeqValue = 0;  
        for(int i = 2; i <= n; i++  ) {  
            //迭代关系(an = n * a(n-1) an-1 = an;)  
            nextSeqValue = i * beforeSeqValue;//相当于数学中的递推公式  
            beforeSeqValue = nextSeqValue;  
            sum += a / nextSeqValue;  
        }  
        /*while(n > 1) { 
            nextSeqValue = n * beforeSeqValue; 
            beforeSeqValue = nextSeqValue; 
            n--; 
        }*/  
        System.out.println("迭代求和耗时:" + (System.currentTimeMillis() - startTime) + "ms");//0ms  
        return sum;  
    }  
}

阶乘求和是指对一系列连续自然数的阶乘进行累加的过程。比如给定一个正整数 n ,我们需要计算从 1! 加到 n! 的总和,也就是 `S = 1! + 2! + ... + n!`。 下面我们将详细描述如何通过编程来解决这个问题,并提供一种简单的 Python 实现方式。 ### 步骤说明 #### 第一步:了解单个阶乘的概念 阶乘函数表示的是某个非负整数以及所有比它小的正整数连乘的结果。例如: - 5! = 5 × 4 × 3 × 2 × 1 = 120, - 而特别规定 0! = 1. 因此每个单独项如 k!(k>=1) 可由递归式定义为: \[ k! = \begin{cases} 1 & \text{k = 0}, \\ k(k−1)!& \text{k >=1}. \end{cases} \] #### 第二步:循环计算总的阶乘和 为了找到前 n 个数字的阶乘累积值,您可以采用循环结构逐一求取每一个因子并加上之前的和。 下面是使用Python编写的一个例子: ```python def factorial_sum(n): total_sum = 0 for i in range(1,n+1): fact = 1 # 初始化当前i的阶乘结果变量fact为1. for j in range(1,i+1): # 内层for-loop负责生成各i对应的阶乘 fact *=j # 将每次迭代后的积赋给factorial(i). total_sum +=fact # 累计阶乘和至total_sum里头去. return total_sum # 示例调用此功能 num=int(input("请输入想要计算的最大整数n: ")) print("阶乘之和=",factorial_sum(num)) ``` 在这个脚本里面我们做了两件事情:第一件事是在外圈遍历所有的目标数(即那些将参与阶乘操作的具体数值),第二件事则是内部再次运用嵌套循环机制完成实际的阶乘计算工作。最后返回的就是所要求的所有这些数阶乘之后相加之和啦! 当然也可以改写成更简洁的形式借助于内置math库里的factorial()方法快速解决问题哦~试试看吧~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值