黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) Java求階乘的計(jì)算方法

Java求階乘的計(jì)算方法

更新時(shí)間:2022-10-18 11:42:28 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽7541次

1.概述

給定一個(gè)非負(fù)整數(shù)n,階乘是所有小于或等于n的正整數(shù)的乘積。

在這個(gè)快速教程中,我們將探索在 Java 中為給定數(shù)字計(jì)算階乘的不同方法。

2. 20 以內(nèi)數(shù)字的階乘

(1)使用for循環(huán)的階乘

讓我們看一個(gè)使用Java for循環(huán)的基本階乘算法:

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

上述解決方案適用于最多 20 的數(shù)字。但是,如果我們嘗試大于 20 的值,那么它將失敗,因?yàn)榻Y(jié)果太大而無(wú)法放入 long中,從而導(dǎo)致溢出。

讓我們?cè)倏磶讉€(gè),注意這些都只適用于少數(shù)人。

(2)使用 Java 8 流的階乘

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

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

在這個(gè)程序中,我們首先使用 LongStream來(lái)遍歷 1 和n之間的數(shù)字。然后我們使用reduce(),它使用標(biāo)識(shí)值和累加器函數(shù)進(jìn)行歸約步驟。

(3)使用遞歸的階乘

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

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

(4)使用 Apache Commons Math 的階乘

Apache Commons Math有一個(gè)帶有靜態(tài)階乘方法的CombinatoricsUtils類,我們可以使用它來(lái)計(jì)算階乘。

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

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

讓我們看一個(gè)使用 CombinatoricsUtils 類的示例:

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

請(qǐng)注意,它的返回類型是long,就像我們自己開(kāi)發(fā)的解決方案一樣。

這意味著如果計(jì)算值超過(guò)Long.MAX_VALUE,則??會(huì)拋出MathArithmeticException。

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

3. 大于 20 的數(shù)的階乘

(1)使用BigInteger的階乘

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

對(duì)于較大的n值,我們可以使用java.math包中的BigInteger類 ,它可以容納高達(dá)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庫(kù)還提供了一種用于計(jì)算較大數(shù)字的階乘的實(shí)用方法。

要包含該庫(kù),我們可以將其guava依賴 項(xiàng)添加到我們的 pom中:

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

現(xiàn)在,我們可以使用BigIntegerMath類中的靜態(tài)階乘方法 來(lái)計(jì)算給定數(shù)字的階乘:

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

以上就是關(guān)于“Java求階乘的計(jì)算方法”的介紹,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容細(xì)致全面,很適合小白學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩日韩 | 国产成人18黄网站免费 | 色原网| 国内一区二区三区精品视频 | 国产99re在线观看只有精品 | 国产一级a毛片高清 | 免费看h成年漫画在线观看 免费看a级 | 一个人免费观看的www视频 | 黄色在线免费观看网站 | 黄色日韩| 国产日韩欧美在线观看不卡 | 999yy成年在线视频免费看 | www.亚洲一区二区三区 | 最近的最新的中文字幕视频 | 国产自愉自愉全免费高清 | 99re视频精品全部免费 | 久久午夜剧场 | 精品人人 | 久久手机免费视频 | 上色天天综合网 | 一级毛片免费一级直接观看 | 国产黄色小视频在线观看 | 免费欧美 | 日韩有码视频在线 | 欧美白人黑人xxxx猛交 | 生活片一级播放免费 | 黄色精品视频 | 波多野结衣 一区 | 成人免费视频无遮挡在线看 | 亚洲激情校园 | 亚洲欧美激情精品一区二区 | 日韩中文精品亚洲第三区 | 免费体验120秒 | www深夜视频在线观看高清 | 精品人人 | 一级毛片一| 久草视频在线免费 | 夜精品a一区二区三区 | 亚洲日产国码 | 国产99re | 成人激情开心 |