Rekursif adalah salah satu algoritma fungsi perulangan dimana fungsi tersebut memanggil dirinya sendiri secara terus menurus. Dalam dunia nyata contoh rekursif terjadi pada dua buah cermin yang saling berhadapan, sehingga akan saling memantulkan bayanganya atau sebuah mikrophone dihadapkan ke speaker outpunya.
Dalam dunia pemrograman rekursif bisa dilakukan dengan membuat sebuah methode memanggil dirinya sendiri.
Dengan metode rekursif kita dapat membuat sebuah menu multi level tak terbatas, kategori artikel, membuat struktur organisasi, membuat multi level group, membuat sistem multi approval dan lain sebagainya.
Hal menarik dari metode rekursif adalah proses yang terjadi di level atas tidak terhapus atau tertimpa oleh proses di level turunanya tetapi tertahan sampai proses yang terjadi di level turunan selesai. Akibat dari mekanisme ini, semakin banyak turunannya semakin besar memori yang digunakan. Kerennya lagi kalian bisa membuat Artificial Intelligence dengan membuat Neural Network dengan metode rekursif, tentunya tidak sesederhana penjelasan di artikel kali ini.
advertisement
Berbeda dengan perulangan yang menggunakan For, While, Do While dan lainnya, yang akan menimpa proses di level sebelumnya yang akan mengakibatkan tidak adanyanya percabangan data.
Sekarang kita lanjut ke cara implementasinya, tapi karena saya tidak tahu bahasa pemrograman yang kalian kuasai, jadi saya berikan pseudokodnya agar bisa kalian impementasi di bahasa pemrograman masing masing.
Algoritma Rekursif
Berikut adalah preudokod menampilkan data bertingkat menggunakan metode rekursif.
Begin
Call Recursive(0)
Function Recursive(param_id,param_sparator)
val datas = getDataByParentId(param_id)
ForEach data in datas
param_sparator = param_sparator & "--"
println(param_sparator & "|" & data)
Recursive(getIdFrom(data),param_sparator)
End ForEach
End Function
End
Pada bagian getDataByParentId dan getIdFrom ganti dengan fungsi pengambilan database kalian (Kueri: select * from [nama_table] where [nama_kolom]= [value])
Contoh Implementasi Algoritma Rekursif
Sebagai contohnya disini saya akan membuat sebuah program sederhana menggunakan vb.net dan c# dengan database sql server.
- Silahkan buat database kemudian eksekusi kueri berikut
create table kategori(id int primary key, kategori varchar(30),parent_id int);
insert into kategori (id,kategori,parent_id) values(1,'IT',0);
insert into kategori (id,kategori,parent_id) values(2,'Programmer',1);
insert into kategori (id,kategori,parent_id) values(3,'Tester',1);
insert into kategori (id,kategori,parent_id) values(4,'Sistem Analis',1);
insert into kategori (id,kategori,parent_id) values(5,'Database Designer',1);
insert into kategori (id,kategori,parent_id) values(6,'Back End',2);
insert into kategori (id,kategori,parent_id) values(7,'Front End',2); - Buat sebuah program console app dan copy paste code berikut
Systex versi vb.net:
Imports System.Data.SqlClient Module Module1 Sub Main() Recursive("0", "") Console.ReadLine() End Sub Sub Recursive(ByVal id As String, ByVal sparator As String) Dim datas As DataTable = getDataByParentId(id) For Each data As DataRow In datas.Rows sparator = sparator & "--" Console.WriteLine(sparator & "|" & data.Item("kategori")) Recursive(data.Item("id"), sparator) Next End Sub Function getDataByParentId(ByVal id As String) As DataTable Dim ds As New DataSet 'Ganti dengan koneksi database kalian Dim sqlcon = New SqlConnection("DATA SOURCE=ANNAJIYAH\SQLEXPRESS;INITIAL CATALOG=Rekursif; USER ID=sa; PASSWORD=123") Dim query = "select * from kategori where parent_id = '" & id & "'" sqlcon.Open() Dim adapter As SqlDataAdapter = New SqlDataAdapter(query, sqlcon) adapter.Fill(ds) sqlcon.Close() Return ds.Tables(0) End Function
Systex versi c# :
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Rekursif_csharp { class Program { static void Main(string[] args){ Program.Recursive("0",""); Console.ReadLine(); } static void Recursive(String id,String sparator){ DataTable datas = getDataByParentId(id); foreach (DataRow data in datas.Rows){ sparator += "--"; Console.WriteLine(sparator + "|" + data.ItemArray[1]); Recursive(data.ItemArray[0].ToString(), sparator); } } static DataTable getDataByParentId(String id){ DataSet ds = new DataSet(); SqlConnection con = new SqlConnection("DATA SOURCE=ANNAJIYAH\\SQLEXPRESS;INITIAL CATALOG=Rekursif; USER ID=sa; PASSWORD=123"); String query = "select * from kategori where parent_id = '" + id + "'"; con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(query, con); con.Close(); adapter.Fill(ds); return ds.Tables[0]; } } }
Silahkan kalian jalankan programnya, maka hasilnya akan seperti gambar berikut:
Terimakasih sudah mampir di artikel cara menampilkan data bertingkat dengan metode rekursif. Jangan lupa di share jika kalian merasa artikel ini bermanfaat, kalau ada pertanyaan silahkan tulis di kolom komentar. Good luck
advertisement
Silahkan berkomentar dengan baik dan bijak!