Bagaimana Menuliskan Fungsi Rekursif Yang Benar? ( algoritma dasar )

0 Comments


Membicarakan soal algoritma rekursif, sebuah algoritma yang paling sederhana tapi sangat penting ini, kadang kala dalam implementasinya banyak yang kesulitan. Maksudnya, banyak diantara kita, saya dan beberapa teman sering salah dalam meng-implementasikan / menerapkan algoritma rekursif dalam bentuk listing kode pemrograman. Tentu jika salah implementasi maka output yang dihasilkan pun akan salah. Padahal syarat sebuah program yang baik adalah yang outputnya benar.

Algoritma Rekursif Dalam Kode Program

Sekedar ingin berbagi, sejauh apa yang saya pahami ketika kita ingin menuliskan kode program yang mewakili suatu keadaan rekursi ( pemanggilan dirinya sendiri ).Untuk berhasil menuliskan kode yang akan berjalan dengan benar saat di-compile atau setelah di eksekusi, ada setidaknya 2 ( dua ) aturan dalam penulisan fungsi / methode rekursif ( mohon dikoreksi bila salah ), diantaranya :

Menentukan titik berhenti

Karena rekursi adalah pemanggilan diri sendiri, maka method / fungsi tersebut tidak akan pernah berhenti dan terus mengerjakan fungsi tersebut berulang secara terus menerus bahkan bisa sampai komputer error karena memori penuh atau dengan istilah lain terjadi stack overflow. Nah, untuk mengendalikan hal tersebut kita / programmer harus menentukan kapan fungsi / method rekursif ini harus berhenti. Misal kasus yang paling mudah adalah fungsi rekursi untuk perhitungan faktorial n! = n*(n-1)*(n-2)*....*1. Dengan faktorial kita akan menulis fungsi seperti berikut (contoh dalam java) kode yang salah
int faktor(int n){
return n*faktor(n-1);
}
pada kode di atas metode faktorial tidak akan pernah berhenti dan pasti akan tampil error seperti ini.
Stack overflow dalam rekursif
 Ini terjadi karena metode / fungsi faktor terus-menerus memanggil dan mengerjakan perkalian n dengan n-1, begitu seterusnya. Untuk memperoleh hasil yang benar dan mengendalikan stack overflow, harus ditambahkan baris yang akan menghentikan fungsi / method pada keadaan tertentu.
int faktor(int n){
if(n<=1)
return 1;
else
return n*faktor(n-1);
}
Pada baris di atas fungsi akan berjalan baik dan tidak akan terjadi error stack overflow karena kita sudah mendifinisikan waktu kapan fungsi ini harus berhenti.

Memanggil fungsi itu sendiri

Setelah menentukan kapan fungsi harus berhenti, yang paling utama adalah tentu meletakkan kode fungsi tersebut di dalam fungsinya. Sehingga apa yang kita sebut rekursif yaitu pemanggilan fungsi di dalam fungsinya sendiri akan berhasil. Demikian, kira-kira yang bisa saya bagikan kali ini. Semoga bermanfaat.

Baca Tulisan Lainnya Juga :)

0 komentar: