大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java求階乘的計算方法

Java求階乘的計算方法

更新時間:2022-10-18 11:42:28 來源:動力節點 瀏覽7381次

1.概述

給定一個非負整數n,階乘是所有小于或等于n的正整數的乘積。

在這個快速教程中,我們將探索在 Java 中為給定數字計算階乘的不同方法。

2. 20 以內數字的階乘

(1)使用for循環的階乘

讓我們看一個使用Java for循環的基本階乘算法:

public long factorialUsingForLoop(int n) {
    long fact = 1;
    for (int i = 2; i <= n; i++) {
        fact = fact * i;
    }
    return fact;
}

上述解決方案適用于最多 20 的數字。但是,如果我們嘗試大于 20 的值,那么它將失敗,因為結果太大而無法放入 long中,從而導致溢出。

讓我們再看幾個,注意這些都只適用于少數人。

(2)使用 Java 8 流的階乘

我們還可以使用Java 8 Stream API很容易地計算階乘:

public long factorialUsingStreams(int n) {
    return LongStream.rangeClosed(1, n)
        .reduce(1, (long x, long y) -> x * y);
}

在這個程序中,我們首先使用 LongStream來遍歷 1 和n之間的數字。然后我們使用reduce(),它使用標識值和累加器函數進行歸約步驟。

(3)使用遞歸的階乘

讓我們看另一個階乘程序的例子,這次使用遞歸:

public long factorialUsingRecursion(int n) {
    if (n <= 2) {
        return n;
    }
    return n * factorialUsingRecursion(n - 1);
}

(4)使用 Apache Commons Math 的階乘

Apache Commons Math有一個帶有靜態階乘方法的CombinatoricsUtils類,我們可以使用它來計算階乘。

要包含 Apache Commons Math,我們將在 pom中 添加commons-math3依賴項:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-math3</artifactId>
    <version>3.6.1</version>
</dependency>

讓我們看一個使用 CombinatoricsUtils 類的示例:

public long factorialUsingApacheCommons(int n) {
    return CombinatoricsUtils.factorial(n);
}

請注意,它的返回類型是long,就像我們自己開發的解決方案一樣。

這意味著如果計算值超過Long.MAX_VALUE,則??會拋出MathArithmeticException。

為了變得更大,我們將需要不同的返回類型。

3. 大于 20 的數的階乘

(1)使用BigInteger的階乘

如前所述,long數據類型只能用于n <= 20的階乘。

對于較大的n值,我們可以使用java.math包中的BigInteger類 ,它可以容納高達2^Integer.MAX_VALUE的值:

public BigInteger factorialHavingLargeResult(int n) {
    BigInteger result = BigInteger.ONE;
    for (int i = 2; i <= n; i++)
        result = result.multiply(BigInteger.valueOf(i));
    return result;
}

(2)使用Guava的階乘

Google 的Guava庫還提供了一種用于計算較大數字的階乘的實用方法。

要包含該庫,我們可以將其guava依賴 項添加到我們的 pom中:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

現在,我們可以使用BigIntegerMath類中的靜態階乘方法 來計算給定數字的階乘:

public BigInteger factorialUsingGuava(int n) {
    return BigIntegerMath.factorial(n);
}

以上就是關于“Java求階乘的計算方法”的介紹,大家如果想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容細致全面,很適合小白學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 狠狠88综合久久久久综合网 | 色综七七久久成人影 | 国产成人精品影院狼色在线 | 七色永久性tv网站免费看 | 免费观看a毛片一区二区不卡 | 亚洲综合网址 | a毛片免费全部播放完整成 a毛片免费全部在线播放毛 | 奇米奇米777 | 久久精品视频8 | 国产精品久久久久久免费播放 | 久久羞羞 | 久久亚洲精品久久久久 | 高清在线精品一区二区 | 国产萝控精品福利视频免费 | 伊人久久综合影院 | 九九色视频 | 欧美日韩精品一区二区三区 | 不卡中文一二三区 | 欧美伊人久久久久久久久影院 | 国产成人精品视频一区 | 久久综合97色综合网 | 欧美成人特黄级毛片 | 日本h片a毛片在线播放 | 中文字幕亚洲综久久2021 | julia紧身裙中文字幕在线看 | 大尺度福利视频在线观看网址 | 天天色天天干天天射 | 特级毛片免费视频播放 | 日韩久久中文字幕 | 欧洲做视频在线观看 | 四虎影视永久在线精品免费播放 | 午夜性爽视频男人的天堂在线 | 亚洲成a v人片在线观看 | 国内偷自视频区视频综合 | 99久久免费精品国产免费高清 | 精品无人区乱码一区二区三区手机 | 国产亚洲精彩视频 | 在线免费观看一级毛片 | 久久伊伊香蕉综合精品 | 精品九九久久国内精品 | 欧美一级视频在线观看欧美 |