Pada postingan sebelumnya, kita menggunakan metode rekursif untuk menghitung faktorial. Kelemahan metode ini adalah dia akan terus melakukan push stack sehingga stack kita bisa saja menjadi overflow (melimpah). Jumlah stack tidak sama untuk tiap JVM, jadi kita tidak bisa memperkirakannya, karena error Stack Overflow terjadi saat runtime di client, bukanlah saat compiling …
Nah, alternatif perhitungan faktorial adalah dengan iterasi, yaitu perulangan.
Kode dapat dilihat di sini:
public void onClickFaktorial(View view){ EditText i = (EditText) findViewById(R.id.editTextInput); EditText o = (EditText) findViewById(R.id.editTextHasil);
o.setText("");//clear
BigInteger bigI = new BigInteger(i.getText().toString()); Log.d("onClickFaktorial","bigI="+bigI.toString());
Perhitungan dilakukan dengan membuat BigInteger b, yang menampung hasil perkalian iterasi tersebut:
b = multiplied(BigInteger.ONE, bigI);
o.setText(b.toString()); } // end onClickFaktorial
dimana fungsi multiplied itu fungsi private kita, dapat dilihat berikut:
private static BigInteger multiplied(BigInteger start, BigInteger stop){ Log.d("multiplied","start="+start+", stop="+stop); //jika start lebih besar dari stop, return satu if(start.compareTo(stop)> 0) return BigInteger.ONE; BigInteger result = start; BigInteger factor = start.add(BigInteger.ONE); // perhatikan bahwa compareTo <1 artinya 0 atau -1 ... "less than or equals" ... <= for (; factor.compareTo(stop)< 1; factor=factor.add(BigInteger.ONE)) { Log.d("multiplied",factor.toString()); result = result.multiply(factor); } return result; }
Fungsi private kita inilah yang berguna untuk menghitung perkalian faktorial, tetapi dimulai dari 2 dikalikan terus sampai bilangan target, stop…
Kenapa terlihat rumit, karena untuk BigInteger, kita tidak dapat menggunakan angka 1, tidak dapat juga melakukan perbandingan dengan tanda >, atau < atau besarsama dan kecil sama seperti bilangan lainnya.
Untuk memudahkan Anda melakukan debugging, saya tambahkan baris Log.d, sehingga nanti akan keluar lognya di Android Studio Anda.
Silahkan lihat bahwa sekarang Android Anda lebih hebat dari calc Windows Anda …
Anda harus log masuk untuk menerbitkan komentar.