Memahami Rekursi di Java: Panduan Lengkap & Contoh Program
Dalam dunia pemrograman, ada kalanya kita perlu menyelesaikan masalah dengan memecahnya menjadi versi yang lebih kecil dari masalah yang sama. Di Java, teknik yang memungkinkan sebuah metode untuk memanggil dirinya sendiri ini dikenal dengan nama Rekursi.
Rekursi atau recurrence dapat didefinisikan sebagai metode yang mengulang prosesnya sendiri. Saat sebuah rekursi dipanggil, proses tersebut akan terus dijalankan dan diulang sampai kondisi berhentinya terpenuhi.
Dua Komponen Utama Rekursi
Dua hal yang selalu ada dan wajib diperhatikan dalam menyusun sebuah metode rekursi adalah Blok Basis dan Blok Rekursi.
- Blok Basis (Kondisi Berhenti): Blok ini merupakan kode program yang memuat kondisi berhenti. Blok inilah yang menyebabkan sebuah rekursi menghentikan prosesnya, sehingga program tidak terjebak dalam infinite loop dan diperoleh hasil akhir. Pada blok ini, nilai yang dikembalikan (return) biasanya berupa nilai netral yang tidak mengubah hasil sebenarnya.
- Blok Rekursi (Kondisi Mengulang): Ini merupakan kode program yang memuat kondisi mengulang. Blok inilah yang nantinya berfungsi mengulang prosesnya terus-menerus dengan memanggil metode itu sendiri.
Sebelum menulis kode, kita harus menentukan konsepnya terlebih dahulu. Konsep ini berisikan urutan atau langkah terperinci yang menjelaskan proses rekursi dari awal sampai akhir, meliputi permisalan (nilai awal), langkah-langkah di setiap perulangan, dan hasil akhir. Memahami konsep cara kerja dasar ini akan sangat memudahkan kita dalam menyusun rekursi ke dalam kode program.
Cara Mendeklarasikan Rekursi di Java
Karena rekursi pada dasarnya adalah sebuah metode, cara mendeklarasikannya sangat mirip dengan cara mendeklarasikan metode biasa. Perbedaan utamanya hanyalah kita harus memisahkan antara blok perulangan dan blok penghentian di dalamnya.
Pemisahan ini biasanya diimplementasikan menggunakan struktur if-else. Berikut adalah bentuk dasar pendeklarasian rekursi di Java:
public static tipedataout namarekursi (tipedatain namavariabelin) {
if (kondisiberhenti) {
return (nilainetral); // Ini adalah Blok Basis
} else {
// kondisimengulang
return (pemanggilanulang); // Ini adalah Blok Rekursi
}
}Cara Memanggil Rekursi
Sama halnya dengan metode biasa, rekursi akan dijalankan jika dipanggil di dalam program utama atau di tempat lain yang membutuhkannya. Cara memanggilnya pun sama dengan memanggil metode pada umumnya.
Format pemanggilannya adalah: namavariabel = namarekursi(variabelinput);. Saat rekursi dipanggil, serangkaian proses di dalamnya akan berjalan, berulang, lalu berhenti dan memberikan hasil akhir.
Contoh Program: Menghitung Faktorial
Penerapan klasik dari rekursi adalah perhitungan matematika seperti Faktorial. Faktorial dari sebuah bilangan bulat positif $n$ (ditulis $n!$) adalah perkalian semua bilangan bulat positif yang kurang dari atau sama dengan $n$.
Misalnya, Faktorial 5 (5!) adalah 5 X 4 X 3 X 2 X 1.
Berikut adalah contoh program Java yang mengimplementasikan rekursi untuk menghitung faktorial:
class contoh_rekursi {
public static void main (String[] args) {
// Memanggil fungsi rekursi faktorial dengan input 5
System.out.println(faktorial(5));
}
// Mendeklarasikan metode rekursi
static int faktorial (int a) {
if (a == 0) {
return 1; // Blok Basis: berhenti jika a = 0, nilai netral perkalian adalah 1
} else {
return a * faktorial(a - 1); // Blok Rekursi: memanggil dirinya sendiri dengan nilai a-1
}
}
}Penjelasan Alur Program:
- Program memanggil
faktorial(5). Karena 5 tidak sama dengan 0, program menjalankan bagianelse:return 5 * faktorial(4). faktorial(4)dipanggil. Hasilnya:return 4 * faktorial(3).- Proses ini berulang hingga
faktorial(0)dipanggil. - Pada
faktorial(0), kondisiif (a == 0)terpenuhi, maka fungsi mengembalikan nilai1(Blok Basis bekerja). - Nilai pengembalian tersebut merambat mundur (1 X 1 X 2 X 3 X 4 X 5), menghasilkan output akhir 120.
Kesimpulan
Rekursi adalah teknik pemrograman yang elegan dan sangat cocok digunakan untuk masalah yang memiliki pola perulangan berkalang, seperti penelusuran struktur pohon (tree traversal) atau perhitungan matematis tertentu. Selalu pastikan Anda menentukan Blok Basis dengan benar agar program rekursi Anda tidak terjebak dalam perulangan tanpa henti!
