Minggu, 20 November 2016

Java Programming : Perkenalan Rekursi (Recursion)

Assalamu'alaikum.
Pagi semua.. Postingan kali ini akan membahas salah satu pemrograman yang dinamakan REKURSI.

Rekursi adalah konsep dalam pengeksekusian program, dimana suatu fungsi memanggil dirinya sendiri.
Normalnya, dalam suatu fungsi yang memanggil fungsi, biasanya fungsi yang dipanggil adalah fungsi lain selain dirinya.
Contohnya dalam pemrograman C (Karena bahasa C adalah bahasa pemrograman tingkat tengah yang menjadi dasar berpikir programmer), suatu fungsi main() memanggil fungsi hitung_penjumlahan(2, 3) (Selama fungsi hitung_penjumlahan() itu sendiri didefinsikan)
Tapi ada kalanya, suatu fungsi memanggil dirinya sendiri. Hal inilah yang dinamakan rekursi / rekursif.

Konsep rekursi umumnya digunakan untuk memindai / memetakan / melakukan pengecekan terhadap sesuatu.
Contoh lainnya adalah dalam pengecekan binary tree apakah pre-order atau post-order

Lalu kenapa harus menggunakan rekursi??
Sebenarnya itu pertanyaan yang salah. Pertanyaan yang benar adalah, kapan kita menggunakan rekursi??
Jadi, penggunaan rekursi biasanya diterapkan pada masalah-masalah dimana kita memerlukan data-data lama sebagai parameter, tanpa perlu disimpan dengan kompleks.
Rekursi sendiri identik dengan backtrack, dimana backtrack adalah penelusuran kembali data-data lama untuk diolah lagi.

Dalam sebuah fungsi rekursi, diharuskan minimal ada 2 case.
Yang pertama adalah base case, dimana base case ini akan mengembalikan nilai yang sifatnya pasti suatu nilai.
Contoh base case : if(i == 0) return i;
Yang kedua adalah recursion case, dimana case ini memanggil fungsi yang merupakan dirinya sendiri.
Contoh recursion case :

factorial(int a){
    if.....
    else return factorial(a-1);
}


atau

factorial(int a){
    if.....
    return factorial(a-1);
}


Untuk contoh penggunaan rekursi dalam pemrograman Java, bisa dilihat pada source code dibawah.

public class SimpleRecursion
{
    public SimpleRecursion(int masukkan_bilangan_bulat){
        int i = masukkan_bilangan_bulat;
       
        System.out.println("Dengan inisialisasi integer = " + i);
        System.out.print(recursion(i));
    }
   
    public int recursion(int a){
        if(a == 0) return a;
        if(a < 0){
            System.out.print(a + "<");
            return recursion(a+1);
        }
        System.out.print(a + ">");
        return recursion(a-1);
    }
}


Kemudian hasil output atau visualisasi program tersebut adalah seperti pada gambar dibawah.


Disitu bisa dilihat jika fungsi rekursi pada contoh diatas adalah public int recursion(int a),
dimana base casenya adalah if(a == 0) return a;
dan recursion casenya adalah return recursion(a-1);

Lalu ada satu perintah lagi diantara base case dan recursion case, yaitu System.out.print dimana disitu saya mem-print out nilai integer secara berurutan.
Jika input awal adalah bilangan bulat positif, maka akan mem-print out bilangan bulat dari terbesar ke terkecil.
Jika input awal adalah bilangan bulat negatif, maka akan mem-print out bilangan bulat dari terkecil ke terbesar.

Sekian penjelasan singkat mengenai rekursi.
Dan seperti biasa, jika ada pertanyaan atau saran untuk postingan ini, silahkan tulis di komentar. Terima kasih.
Wassalamu'alaikum.

Tidak ada komentar:

Posting Komentar