Page Nav

HIDE

Grid

GRID_STYLE

Breaking News

latest

Fungsi Rekursif dan Penerapannya di PHP

Fungsi  merupakan bagian yang tidak terpisahkan dari konsep bahasa pemrograman. Dengan adanya fungsi, akan meningkatkan readibility (kemudah...

Fungsi merupakan bagian yang tidak terpisahkan dari konsep bahasa pemrograman. Dengan adanya fungsi, akan meningkatkan readibility (kemudahan untuk dibaca), modularity (pemecahan program menjadi modul-modul) dan reusability (dapat digunakan kembali) program kita. Lalu apa itu fungsi rekursif? Singkatnya, fungsi rekursif adalah suatu fungsi yang memanggil dirinya sendiri. Jadi di dalam suatu fungsi rekursif terdapat pemanggilan terhadap dirinya sendiri.

Penasaran? Dalam tutorial kali ini, saya akan menyajikan beberapa contoh sederhana penerapan fungsi rekursif di bahasa pemrograman PHP. Pada akhir tutorial, akan dicontohkan penggunaan fungsi rekursif dalam menampilkan menu bertingkat yang diambil dari database MySQL.

Fungsi rekursif biasanya digunakan untuk menyelesaikan permasalahan yang memiliki keteraturan pola dalam prosesnya, contohnya dalam menyelesaikan soal menampilkan deret bilangan. Salah satu kelebihan penggunaan fungsi rekursif adalah secara penulisan code program akan lebih singkat dan efektif. Namun kekurangannya tidak terlalu efektif secara performa dan waktu eksekusi program karena fungsi rekursif membutuhkan resources memory yang lebih besar. Dan jika tidak hati-hati dalam mendefinisikan proses di dalam fungsi rekursif, seringkali menghasilkan proses yang tidak pernah berhenti (infinitive process).

Menghitung Faktorial dengan Rekursif

Salah satu contoh yang paling mudah untuk menjelaskan fungsi rekursif adalah faktorial. Kita tahu bahwa dalam matematika, faktorial dari bilangan asli n adalah hasil perkalian antara bilangan bulat positif yang kurang dari atau sama dengan n. Faktorial ditulis sebagai n! dan disebut n faktorial. Sebagai contoh 5! = 5 x 4 x 3 x 2 x 1 = 120.
Jika dilihat dari keteraturan pola dalam menghitung nilai faktorial suatu bilangan, maka dapat diselesaikan dengan menggunakan fungsi biasa maupun fungsi rekursif. Perhatikan dan bandingkan kedua program berikut ini dimana program pertama tanpa rekursif dan program kedua dengan rekursif.


  1. <?php






  2. function faktorial($n=1) {



  3. $hasil = 1;



  4. for($i=$n; $i >= 1; $i--) {



  5. $hasil = $hasil * $i;



  6. }



  7. return $hasil;



  8. }






  9. echo "10! = ".faktorial(10);






  10. ?>



Pada program di atas, proses menghitung nilai faktorial dilakukan dengan menggunakan perulangan. Sedangkan pada program di bawah ini, proses perhitungan dengan menggunakan fungsi rekursif. Di dalam fungsi terdapat pemanggilan fungsi diri sendiri dengan parameter ($n-1) yang dikalikan dengan $n.


  1. <?php






  2. function faktorial($n=1) {



  3. if ($n==1) {



  4. return 1;



  5. } else {



  6. return $n * faktorial ($n-1);



  7. }



  8. }






  9. echo "10! = ".faktorial(10);






  10. ?>



Pada kedua contoh di atas mungkin tidak terlalu menonjol mengenai manfaat fungsi rekursif. Pada contoh yang lebih kompleks, misalnya melakukan penelusuran suatu graph atau tree, fungsi rekursif akan lebih tepat digunakan dibanding fungsi biasa.

Menampilkan Menu Bertingkat (Tree Menu) dengan Fungsi Rekursif

Menu atau navigasi merupakan bagian penting dan tidak dapat terpisahkan dari suatu halaman web. Menu yang kompleks biasanya diorganisasikan menjadi beberapa tingkat sedemikian hingga jika digambarkan akan terbentuk seperti diagram pohon. Menu tersebut sering disebut tree-menu. Untuk membuatnya pun sudah banyak dibahas di berbagai website, termasuk di website ini (baca kembali tutorial “Membuat Menu Bertingkat dengan JQuery jQSimpleMenu” dan “Membuat Menu Bertingkat (Tree Menu) dengan Dreamweaver“).
Pada bagian ini, saya tidak akan mengulang kembali bagaimana menggunakan library jQuery atau sejenisnya untuk membuat menu bertingkat, namun lebih pada bagaimana menyimpan menu bertingkat ke dalam database MySQL dan menampilkannya dalam bentuk unordered-list di HTML, tentunya dengan memanfaatkan fungsi rekursif.
Langsung saja, kita ikuti langkah-langkahnya:
Langkah #1. Buat database dan tabel untuk menyimpan informasi menu.
Saya asumsikan Anda sudah bisa membuat database di MySQL, baik dengan tools bantuan seperti PHPMyAdmin, MySQL Front, SQL Yog dll maupun dengan cara manual menggunakan mysql-console. Jika belum, coba pelajari buku gratis MySQL 5 yang dapat didownload di website ini. Setelah database dibuat, sekarang kita buat tabelnya, kurang lebih strukturnya sebagai berikut:
KolomTipe DataKeterangan
kd_menuint(5)Kode Menu
nm_menuvarchar(50)Nama menu yang akan ditampilkan
linkvarchar(50)Link ke halaman menu
kd_parentint(5)Kode menu yang menjadi induknya. Menu yang paling atas diatur induk-nya 0.
Jika tabel sudah dibuat, isikan dengan beberapa contoh data. Bagi yang ga mau repot, saya sudah menyediakan perintah SQL untuk membuat tabel dan mengisi contoh datanya. Tinggal dijalankan di mysql client Anda.
Langkah #2. Buat fungsi rekursif dan jalankan.
Pada Program di bawah ini, akan dilakukan pengambilan data secara rekursif dari tabel menu yang sudah dibuat sebelumnya. Selanjutnya data akan ditampilkan dalam bentuk unordered-list (ul) di HTML.


  1. <?php



  2. #koneksi mysql



  3. mysql_connect("localhost","root","");





  4. #end koneksi






  5. function html_menu(&$strmenu="", $parent=0) {



  6. $query = "SELECT kd_menu, kd_parent, nm_menu, link



  7. FROM menu WHERE kd_parent='$parent'



  8. ORDER BY kd_menu";



  9. //die ($query);



  10. $sql = mysql_query($query);






  11. if (mysql_num_rows($sql) > 0) {



  12. $strmenu .= '<ul>';



  13. }






  14. // tampilkan anaknya



  15. while ($row = mysql_fetch_assoc($sql)) {






  16. $strmenu .= "<li>";



  17. $strmenu .= sprintf("<a href='%s' title='%s'>%s</a>", $row['link'], $row['nm_menu'], $row['nm_menu']);






  18. //panggil diri sendiri



  19. html_menu($strmenu, $row['kd_menu']);



  20. $strmenu .= "</li>";



  21. }






  22. if (mysql_num_rows($sql) > 0)



  23. $strmenu .= '</ul>';






  24. }






  25. $strmenu = "";



  26. html_menu($strmenu, 0);



  27. echo $strmenu;



  28. ?>



Berikut ini kurang lebih tampilan akhir jika program di atas dijalankan.

Tampilan Menu dalam bentuk Unordered-List
Demikian tutorial singkat ini, semoga ada manfaatnya untuk kita semua.

Referensi

Tidak ada komentar