PENGERTIAN REKURSIF (RECURSION)
Rekursif adalah konsep pengulangan
yang penting dalam ilmu komputer. Konsep ini dapat digunakan untuk merumuskan
solusi sederhana dalam sebuah permasalahan yang sulit untuk diselesaikan secara
iteratif dengan menggunakan loop for, while do. Pada saat tertentu konsep ini
dapat digunakan untuk mendefinisikan permasalahan dengan konsisten dan
sederhana. Pada saat yang lain, rekursi dapat membantu untuk mengekspresikan
algoritma dalam sebuah rumusan yang menjadikan tampilan algoritma tersebut
mudah untuk dianalisa.
Rekursif berarti bahwa suatu proses bisa memanggil dirinya sendiri.
Menurut definisi dalam Microsoft Bookshelf, Rekursif adalah kemampuan suatu
rutin untuk memanggil dirinya sendiri. Dalam Rekursif sebenarnya terkandung
pengertian prosedur dan fungsi. Perbedaannya adalah bahwa rekursif bisa
memanggil ke dirinya sendiri, tetapi prosedur dan fungsi harus dipanggil lewat
pemanggil prosedur dan fungsi. Rekursif merupakan teknik pemrograman yang
penting dan beberapa bahasa pemrograman mendukung keberadaan proses rekursif
ini. Dalam prosedur dan fungsi, pemanggilan ke dirinya sendiri bisa berarti
proses berulang yang tidak bisa diketahui kapan akan berakhir.
KELEBIHAN DAN KELEMAHAN REKURSIF
KELEBIHAN DAN KELEMAHAN REKURSIF
Kelebihan Perulangan Rekursif :
•
Sangat mudah untuk melakukan perulangan
dengan batasan yang luas dalam artian melakukan
perulangan dalam skala yang besar.
• Dapat
melakukan perulangan dengan batasan fungsi.
Kekurangan Perulangan Rekursif:
• Tidak bisa melakukan nested loop atau looping
bersarang.
• Biasanya membuat fungsi sulit untuk dipahami,
hanya cocok untuk persoalan tertentu saja.
• Trace error sulit.
• Memerlukan
stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan
parameter formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan
stack tak cukup lagi (Stack Overrun).
• Proses agak
berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan
pemanggilan data yang ditumpuk.
CODE
Address
Alokasi (infotype X) {
address P;
P= (address)malloc(sizeof(ElmtList));
if(P!=Nil) {
Info(P) = X;
Next(P) = Nil;
}
}
|
Menyediakan
tempat untuk element list. Jika P benar bernilai NIL
Info(P)=X
|
NIL
|
Menyedian
ruang untuk meyimpan dan next berisi kosong (Nill)
int
IsEmpty (List L) {
return (L==Nil);
}
|
Jika
list kosong maka benernilai Nil
int
IsOneElmt (List L) {
return((!IsEmpty(L))&&
(IsEmpty(Tail(L))));
}
|
Akan mencetak IsOneElement mencetak List tersebut.
infotype FirstElmt
(List L) {
return (Info(L));
}
|
Menentukan
data FirstElement atau Data Pertama pada suatu list.
List
Tail (List L) {
return
(Next(L)); }
|
Menentukan
data selain Firstelement pada list
List
Konso (List L, infotype e) {
address P;
P = Alokasi(e);
if(P==Nil) {
return L;
}
else {
Next(P) = L;
}
return P;
}
|
Jika
P bernilai Nill maka List L
Jika
address mengarah ke Next maka mencetak L
Dan
address akan berhenti.
int
NbElmt(List L) {
if(IsEmpty(L))
return 0;
else {
return (1+NbElmt(Tail(L)));
}
}
|
Jika
List bernilai Empty maka akan mencetak 0 Jika tidak akan menjalankan perulangan
NbElmt yaitu dengan menambahkan angka pada list dan setiap angkanya dijadikan 1
untuk menghitung berapa banyak angka pada suatu list
Contoh
: List 2 3 4 5 6
Maka
=> 1 + NbElmt (3 4 5 6)
1 + 1 + NbElmt ( 4 5 6)
1 +1+1+ NbElmt (5 6)
1 +1+1+1+ NbElmt (6)
1 +1+1+1+1+ NbElmt ()
Maka
Hasilnya 5
Jadi
Kegunaan dari NbElmt merupakan suatu fungsi untuk menghasilkan banyaknya elemen
pada suatu list dengan menggunakan konsep rekursif dan nol hasilnya jika kosong
Int JumList(List L){
if(IsEmpty(L)){
return 0;
else
{
return (FirstElmt(L)+JumList(Tail(L)));
}}
|
Jika
List L bernilai Empty atau kosong maka akan mencetak 0 jika tidak terpenuhi
akan
Melakukan
penjumlahan dari elemen pertama pada list lalu ditambahkan jumlah list yaitu
selain element pertama untuk disimpan
lalu dijumlahkan dengan element pertama bergantian sampai perulangan
terakhir atau sampai angka habis.
Contoh
: List 2 3 4 5 6
Maka
=> 2 + JumList (3 4 5 6)
2 + 3 + 4 + JumList ( 5 6)
2 + 3 + 4 + 5 + JumList ( 6)
2 + 3 + 4 + 5 + 6 + JumList ()
Maka
Hasilnya => 20
Jadi
kegunaan dari JumList adalah untuk menghitung penjumlahan element didalam suatu
list
int
JumGenapRec(List L){
if(IsEmpty(L)){
return 0;
}else if(FirstElmt(L)%2==0){
return
FirstElmt(L)+JumGenapRec(Tail(L));
}else{
return JumGenapRec(Tail(L));
}
}
|
Jika
List L bernilai Empty atau kosong makan mencetak 0 jika tidak terpenuhi akan
menjalankan perulangan ke 2 Jika list L bernilai genap akan ditambahkan jika
tidak kembali lagi ke List genap.
Contoh
: List 2 3 4 5 6
Maka
=> 2 + JumGenapRec (3 4 5 6)
2 + 4 + JumGenapRec (6)
2 + 4 + 6 + JumGenapRec ()
Maka
Hasilnya => 12
Jadi
fungsi dari JumGenapRec sendiri yaitu untuk menghitung penjumlahan elemen genap
pada suatu list,jika list tersebut tidak mempunyai elemen genap maka akan
menampilkan hasil Nol.
No comments:
Write comments