Java求阶乘和:1!+2!+3!+4!+...+n!

求阶乘和:1!+2!+3!+4!+…+n!

写代码前

看到题目,一开始没思路不要慌~~~

  • 先思考,可以把想到的点子都记在本子上;
  • 串起来整合,再上手写代码,比直接就写理解更深刻;
  • 从而达到巩固知识,举一反三的效果。

说干就干

  • 好,我们回归正题,题给要求很简单,求阶乘和。
  • 也就是说,我们先得拿到: 数字1-数字n 的阶乘,然后再把:n个数字的阶乘加起来,即得到结果;
  • 脑海里搜索回忆以及一番思考后,有三种方法可以解决这道题,以下都写成了方法(也就是函数)形式。
方法一:while循环

【代码1】

import java.util.Scanner;

public class myPractice {
	
	public static int facSum(int n) {	
		int sum = 0;
		int i = 1;
		// 外层循环负责求阶乘的和
		while (i <= n) {
			int facResult = 1;
			int j = 1;
			// 里层循环负责完成求阶乘的细节
			while (j <= i) {
				facResult *= j;
				j++;
			}
			i++;
			sum += facResult;
		}
		return sum;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();
		int ret = facSum(n);  //方法一
        System.out.println(n + " 的阶乘和为:" + ret);
	}
}
方法二:for循环

【代码2】

import java.util.Scanner;

public class myPractice {

	public static int sumFac(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            int ret = 1;
            for (int j = 1; j <= i; j++) {
                ret *= j; // ret = ret * j;
            }
            sum += ret; // sum = sum + ret;
        }
        return sum;
    }

	public static void main(String[] args) { // m4
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int ret = sumFac(n);  //方法二
        System.out.println(n + " 的阶乘和为:" + ret);
    }
}

在【代码2】里我们可以发现,while循环 逻辑和 for循环 很相似,但就结构上来说,显而易见 for循环 要更清晰和简洁一些。

方法三:递归

【代码3】

import java.util.Scanner;

public class myPractice {

	public static int fac(int n) { //求阶乘
        if (n == 1) {
            return 1;
        }
        return n * fac(n - 1);
    }

    public static int sum(int n) { //求阶乘和
        if (n == 1) {
            return 1;
        }
        return fac(n) + sum(n-1);
    }

	public static void main(String[] args) { // m4
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int ret = sum(n);  //方法三
        System.out.println(n + " 的阶乘和为:" + ret);
    }
}

借助下图可更好地理解 递归求阶乘和,以 n = 3 为例。
在这里插入图片描述

最终小结

  • 孔子曰:吾日三省吾身、温故而知新。
  • 写代码也是,每学一点,巩固之前学过、写过、看过的代码,每当我学习新知识卡住的时候,我往往会回顾一下之前学过得相关的知识,这样,往往会有一些新的理解,我认为这是一个不错的办法。
  • BUT,有时候这个过程呢,往往有点煎熬。。以及枯燥=^=
  • 正所谓:代码虐我千百遍,我待代码如初恋~~
  • 加油!奥利给!
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值