Ternary Operator dan Konsep Rekursifitas pada Bahasa C



Pertama-tama, kita ingat kembali tentang kerangka if-else
if (/* condition */)
{
   // TODO
}
else
{
   // TODO
}
Kita bisa menulisnya dengan kerangka sintaks yang lain seperti ini
(/* condition */) ? /* TODO */ : /* TODO */;
Perhatikan baik-baik, tanda ? sama artinya dengan if dan tanda : sama artinya dengan else.
Contoh.
if (*value == value[0])
{
   printf("Sama\n");
}
else
{
   printf("Tidak sama\n");
}
Dikonversikan memakai ternary operator menjadi seperti ini
(*value == value[0]) ? printf("Sama\n") : printf("Tidak sama\n");

Kita lanjut ke konsep rekursifitas, apa itu fungsi rekursif ?
Fungsi rekursif adalah fungsi yang "memanggil" dirinya sendiri, bingung ?
Lihat contoh kerangka fungsinya di bawah ini
int fungsi()
{
   fungsi();
}
Tetapi kalo dipikir-pikir, fungsi itu seakan-akan memanggil dirinya sendiri terus-menerus tanpa ada ujungnya. Nah, agar fungsi tersebut dapat berhenti, kita membuat suatu Base Case atau kondisi dimana fungsi rekursif tersebut berhenti berjalan. Seperti pada contoh fungsi faktorial berikut ini.
int faktorial(int n)
{
   if (n == 0) // BASE CASE
   {
      return 1;
   }

   return n * faktorial(n - 1);
}


Sekarang, mari kita coba skill baru kita untuk membuat kode yang sangat sederhana tapi powerful.
Lihat contoh fungsi linear search ini.
int linear_search(int data[], int length, int key)
{
   for (int i = 0; i < length; i++)
   {
      if (data[i] == key)
      {
         return i;
      }
   }

   return -1;
}
Kita bisa membuat fungsi linear search di atas hanya dengan menulis kode seperti ini.
int linear_search(int data[], int length, int key)
{
   return (data[length - 1] == key) ? length - 1 : 
   ((length < 0) ? -1 : linear_search(data, length - 1, key));
}

Sekarang kita bisa membuat fungsi linear search hanya dengan sedikit baris kode, cool kan ? :D

3 comments

kegunaannyo fungsi manggil dirinyo dewek apo?? :v

Reply

Biasanya fungsi rekursif itu mudah dilacak dimana errornya karena baris kode yg lebih sedikit dari fungsi iteratif.
Terus juga biasanya digunakan pada program-program yang memiliki tingkatan-tingkatan pada algoritmanya seperti Quick Sort dan Merge Sort.
Mana yang lebih cepet, fungsi iteratif atau fungsi rekursif ? sebenarnya sih sama aja, cuma yah seperti yang diomongin tadi. :D

Reply

Post a Comment