434 字
约 1 分钟
1
阶乘-Factorial

阶乘-Factorial

来源: https://bugstack.cn/md/algorithm/logic/math/2022-10-30-factorial.html


《程序员数学:阶乘》—— 阶乘的用途是什么?

作者:小傅哥 **博客:https://bugstack.cn 源码:https://github.com/fuzhengwei/java-algorithms 沉淀、分享、成长,让自己和他人都能有所收获!😄

一、前言

阶乘的历史 早在12世纪,印度学者就已有使用阶乘的概念来计算排列数的纪录。1677年时,法比安·斯特德曼使用Change ringing来解释阶乘的概念。在描述递归方法之后,斯特德将阶乘描述为:“现在这些方法的本质是这样的:一个数字的变化数包含了所有比他小的数字(包括本身)的所有变化数……因为一个数字的完全变化数是将较小数字的变化数视为一个整体,并透过将所有数字的完整变化联合起来。”

二、定义

阶乘可通过连续乘积来定义:n!=1·2·3···(n-2)·(n-1)·n 用连乘积符号可表示为:

从上述公式中,可以推导出递推关系:n!=n·(n-1)! 但递归定义须给出base case,因此需要定义零的阶乘。 除此之外,递推关系在阶乘函数中各个值皆成立,例如: 5!=5·4! 6!=6·5! 50!=50·49!

三、实现

递归实现**

public class Factorial {

    public long factorial(long number) {
        if (number  1)
            return 1;
        else {
            return number * factorial(number - 1);
        }
    }

}

1**2 3 4 5 6 7 8 9 10 11 就是一个简单的递归调用,实现起来还是蛮简单的。

四、测试

单元测试**

@Test
public void test() {
    Factorial factorial = new Factorial();
    long result = factorial.factorial(5);
    System.out.println("测试结果:" + result);
}

1 2 3 4 5 6

  • 计算5的阶乘,测试结果120
阶乘-Factorial
http://www.clxhxhhr.top/posts/1528/
作者
clxstart
发布于
2026-09-18
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。