Hitung Faktorial di Jawa

1. Ikhtisar

Diketahui bilangan bulat non-negatif n , faktorial adalah hasil kali dari semua bilangan bulat positif kurang dari atau sama dengan n .

Dalam tutorial singkat ini, kita akan mempelajari berbagai cara untuk menghitung faktorial untuk bilangan tertentu di Java .

2. Faktorial untuk Bilangan hingga 20

2.1. Faktorial Menggunakan for Loop

Mari kita lihat algoritma faktorial dasar menggunakan for loop:

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

Solusi di atas akan berfungsi dengan baik untuk angka hingga 20 . Tapi, jika kita mencoba sesuatu yang lebih besar dari 20, maka itu akan gagal karena hasilnya akan terlalu besar untuk dimasukkan ke dalam long , menyebabkan overflow.

Mari kita lihat beberapa lagi, dengan memperhatikan bahwa masing-masing ini hanya akan berfungsi untuk jumlah kecil.

2.2. Faktorial Menggunakan Aliran Java 8

Kita juga dapat menggunakan Java 8 Stream API untuk menghitung faktorial dengan cukup mudah:

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

Dalam program ini, pertama-tama kami menggunakan LongStream untuk melakukan iterasi melalui angka antara 1 dan n . Kami kemudian menggunakan reduce () , yang menggunakan nilai identitas dan fungsi akumulator untuk langkah pengurangan.

2.3. Faktorial Menggunakan Rekursi

Dan mari kita lihat contoh lain dari program faktorial, kali ini menggunakan rekursi:

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

2.4. Faktorial Menggunakan Apache Commons Math

Apache Commons Math memiliki kelas CombinatoricsUtils dengan metode faktorial statis yang dapat kita gunakan untuk menghitung faktorial.

Untuk menyertakan Apache Commons Math, kami akan menambahkan dependensi commons-math3 ke pom kami :

 org.apache.commons commons-math3 3.6.1 

Mari kita lihat contoh menggunakan kelas CombinatoricsUtils :

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

Perhatikan bahwa jenis pengembaliannya panjang , seperti solusi yang ditanam di rumah.

Artinya di sini bahwa jika nilai yang dihitung melebihi Long.MAX_VALUE , MathArithmeticException akan dilempar.

Untuk menjadi lebih besar, kita membutuhkan tipe pengembalian yang berbeda.

3. Faktorial untuk Bilangan Lebih Dari 20

3.1. Faktorial Menggunakan BigInteger

Seperti yang telah dibahas sebelumnya, tipe data panjang dapat digunakan untuk faktorial hanya untuk n <= 20 .

Untuk nilai n yang lebih besar , kita dapat menggunakan kelas BigInteger dari paket java.math , yang dapat menampung nilai hingga 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; }

3.2. Faktorial Menggunakan Jambu Biji

Perpustakaan Guava Google juga menyediakan metode utilitas untuk menghitung faktorial untuk bilangan yang lebih besar.

Untuk memasukkan library tersebut, kita dapat menambahkan dependensi guava ke pom kita :

 com.google.guava guava 25.1-jre 

Sekarang, kita dapat menggunakan metode faktorial statis dari kelas BigIntegerMath untuk menghitung faktorial dari bilangan tertentu:

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

4. Kesimpulan

Dalam artikel ini, kami melihat beberapa cara menghitung faktorial menggunakan inti Java serta beberapa pustaka eksternal.

Kami pertama kali melihat solusi yang menggunakan tipe data panjang untuk menghitung faktorial angka hingga 20 . Kemudian, kami melihat beberapa cara menggunakan BigInteger untuk angka yang lebih besar dari 20.

Kode yang disajikan dalam artikel ini tersedia di Github.