Tuesday, 25 October 2016

Rekursif

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 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.

    Choose :
  • OR
  • To comment
No comments:
Write comments