Számítsa ki a Factorial-t Java-ban

1. Áttekintés

Adott egy nem negatív egész szám n, a faktoriális az összes kisebb vagy egyenlő pozitív egész szám szorzata n.

Ebben a gyors bemutatóban felfedezzük egy adott szám tényleges számításának különböző módjai Java-ban.

2. Faktoriális szám 20-ig

2.1. Faktoriális a mert Hurok

Lássunk egy alapvető faktoriális algoritmust az a használatával mert hurok:

public long factorialUsingForLoop (int n) {long fact = 1; mert (int i = 2; i <= n; i ++) {tény = tény * i; } visszatérési tény; }

A fenti megoldás működni fog 20-ig terjedő számok esetén bírság. De, ha megpróbálunk valami nagyobbat, mint 20, akkor ez kudarcot fog okozni az eredmények túl nagyok lennének ahhoz, hogy a hosszú, túlcsordulást okozva.

Lássunk még néhányat, megjegyezve, hogy mindegyik ezek csak kis számban fognak működni.

2.2. Faktoriál Java 8 adatfolyamok használatával

Használhatjuk a Java 8-at is Folyam API a tényezők egyszerű kiszámításához:

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

Ebben a programban először használjuk LongStream közötti számok iterációja n. Ezután használtuk csökkenteni (), amely identitásértéket és akkumulátorfüggvényt használ a csökkentési lépéshez.

2.3. Faktoriális rekurzió használata

Lássunk egy tényezői program egy másik példáját, ezúttal rekurzióval:

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

2.4. Tényező az Apache Commons Math használatával

Az Apache Commons Mathnak van egy CombinatoricsUtils osztály statikus faktoriális módszer, amellyel kiszámíthatjuk a faktoriált.

Az Apache Commons Math felvételéhez hozzáadjuk a commons-math3 függőség a mi pom:

 org.apache.commons commons-math3 3.6.1 

Lássunk egy példát a CombinatoricsUtils osztály:

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

Figyelje meg, hogy a visszatérési típusa hosszú, akárcsak saját fejlesztésű megoldásaink.

Ez itt azt jelenti, hogy ha a számított érték meghaladja a Hosszú.MAX_VALUE, a MathArithmeticException dobják.

Hogy nagyobb legyen, más visszatérési típusra lesz szükségünk.

3. Faktorial a 20-nál nagyobb számokhoz

3.1. Faktoriális felhasználás BigInteger

Amint azt korábban megbeszéltük, a hosszú az adattípus csak tényezőkhöz használható n <= 20.

Nagyobb értékek esetén n, használhatjuk a BigInteger osztály tól java.math csomag, amely elfér értékek 2 ^ Egész szám.MAX_VALUE:

public BigInteger factorialHavingLargeResult (int n) {BigInteger eredmény = BigInteger.ONE; for (int i = 2; i <= n; i ++) eredmény = eredmény.többszörözés (BigInteger.valueOf (i)); visszatérési eredmény; }

3.2. Faktoriális a Guava használatával

A Google Guava könyvtárában egy segédprogram is rendelkezésre áll, hogy nagyobb számokhoz kiszámítsák a faktoriálokat.

A könyvtár felvételéhez hozzáadhatjuk a gujávafa függőség a mi pom:

 com.google.guava guava 25.1-jre 

Most használhatjuk a statikát faktoriális módszer a BigIntegerMath osztály egy adott szám faktoriálisának kiszámításához:

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

4. Következtetés

Ebben a cikkben láttunk néhány módszert a tényezők kiszámítására az alapvető Java, valamint néhány külső könyvtár segítségével.

Először a hosszú adattípus a számok tényleges számításához 20. Aztán megláttunk pár felhasználási módot BigInteger 20-nál nagyobb számok esetén.

Az ebben a cikkben bemutatott kód elérhető a Github oldalon.