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.