Saya yakin pasti pembaca - pembaca di sini pasti sudah pada mahir semua di bidang pemrograman. Ada yang mahir buat website super cantik tampilannya, ada juga yang mahir buat aplikasi server dengan backend yang super hebat cara kerjanya. Saya di sini menulis tutorial ini cuma ingin memperkenalkan salah satu algoritma yang umum atau bahkan paling sering dibenci oleh kalangan programmer - programmer lainnya yakni, Algoritma Rekursif. Jujur saya saja kalau dengar kata rekursif pasti langsung agak gimana gitu. Tapi, walaupun rekursif susah namun, permainannya itu mengasyikkan loh. Karena, rekursif itu intinya bermain di dalam method dan akan berakhir apabila kondisi pembatasnya sudah terpenuhi. Rekursif hampir sama kayak perulangan hanya saja rekursif tidak menggunakan sintaks perulangan di dalamnya seperti for, while, dan do-while. Ini yang saya suka dari algoritma rekursif ini bagaimana bisa coba Anda ingin membuat sebuah perulangan di dalamnya namun, Anda tidak menggunakan sintaks perulangannya. Jadi, berdasarkan uraian sebelumnya bahwa rekursif ialah sebuah algoritma yang mana pada sebuah method di dalamnya memanggil method dirinya sendiri sehingga apabila Anda tidak terlalu mahir menggunakan algoritma rekursif ini maka, akan terjadilah suatu perisitiwa yang namanya itu ialah Infinitely Looping atau bahasa indonesianya ialah Perulangan yang tak terbatas. hehehehe..... siapkah Anda mengalami infinitely looping?
Untuk pemakaiannya sih, jujur saja bahwa saya sudah setahun jadi programmer di sebuah perusahaan masih jarang atau sama sekali tidak pernah menggunakan algoritma ini dalam proses pembuatan aplikasi yang akan saya kerjakan. Mungkin karena aplikasi yang saya kerjakan masih terbilang mudah makanya, tidak perlu memakai algoritma ini. Tapi, walaupun jarang dipakai tapi algoritma ini sangat bagus bagi Anda yang masih polos - polosnya di bidang pemrograman dalam melatih pola pikir Anda dalam memahami alur algoritma ini. Awalnya sih tidak gampang belajar algoritma rekursif ini karena saya awalnya juga begitu. Tapi, bagi Anda yang mau belajar algoritma rekursif ini alangkah lebih baiknya siapkan selembar kertas atau 1 buku tulis juga boleh untuk Anda coret - coret dalam memahami algoritma ini.
Sebagai perkenalan, berikut saya beri contoh source code mencetak angka 1 sampai 10 dengan menggunakan rekursif.
public class Main { public static void main(String[] args) { cetakAngka(1); } static void cetakAngka(int angka) { if (angka <= 10) { System.out.print(angka + " "); cetakAngka(++angka); } } }
Gimana??? Gampang kan belajar algoritma rekursif.... Selanjutnya, kita selangkah lebih maju yuk dengan membuat segitiga siku - siku waktu masa kuliah dulu dengan algoritma rekursif. Berikut source code nya.
public class Main2 { public static void main(String[] args) { cetakSegitigaSiku(1, 1, 5); } static void cetakSegitigaSiku(int row, int col, int batas) { if (row <= batas) { if (col <= row) { System.out.print("* "); } if (col == row) { System.out.println(); cetakSegitigaSiku(++row, 1, batas); } else { cetakSegitigaSiku(row, ++col, batas); } } } }
Mulai bingung yah??? cayo.... semangat yah.... Sedikit lagi kamu pasti bisa kok. Pahaminya pelan - pelan ya.
Kalau sudah paham pada kedua contoh source code diatas, kita selangkah lebih maju lagi yuk. Berikut source code untuk menampilkan bilangan fibonacci dengan algoritma rekursif.
public class Main3 { // variable global static int index = 0; static String str = ""; public static void main(String[] args) { cetakFibonacci(10); } static void cetakFibonacci(int batas) { int temp1 = 0; int temp2 = 1; if (index < batas) { if (index == 0) { System.out.print(temp1 + " "); str += temp1 + ";"; } else if (index == 1) { System.out.print(temp2 + " "); str += temp2 + ";"; } else { String[] arr = str.split(";"); temp1 = Integer.parseInt(arr[arr.length - 1]); temp2 = Integer.parseInt(arr[arr.length - 2]); System.out.print((temp1 + temp2) + " "); str += (temp1 + temp2) + ";"; } index++; cetakFibonacci(batas); } } }
Gimana? Asik bukan belajar rekursif. Oya, sedikit info tambahan bahwa rekursif ini tidak hanya berlaku pada method saja melainkan juga bisa pada function. Dan sedikit catatan untuk algoritma rekursif ini ialah bahwa pastikan di dalam method yang Anda gunakan memiliki kondisi agar tidak terjadi infinitely looping. Yang udah paham silakan explore sendiri ya, biar makin paham sama si rekursif ini. Dan berikut ialah output untuk source code diatas.
Gambar: Output cetak angka 1 s.d. 10
Gambar: Cetak Segitiga Siku
Gambar: Cetak bilangan fibonacci