Selasa, 18 Desember 2018


Function, Recursion and Structure

Pendahuluan
Dalam kehidupan sehari-hari, ketika kita mengerjakan sesuatu, pastinya harus secara efektif dan efisien supaya hasil yang didapatkan maksimum. Hal ini juga di terapkan dalam dunia programming dengan sistem yang disebut function dan recursion.

Modular Programming
Modular programming adalah programming dengan cara membagi coding kita menjadi beberapa modul atau sub program untuk mempermudah kita membaca dan memperbaiki kesalahan kita saat programming serta menjamin efektif dan efisiensi program kita.

Kebanyakan orang selalu membuat program dengan cara brute force atau secara langsung. Namun, sayangnya program yang sangat kompleks tidak bagus di buat dengan cara brute force karena tidak efektif dan membuang banyak waktu.

Oleh karena itu, sangat disarankan agar gaya modular programming diterapkan untuk membuat program dengan skala coding yang besar dan kompleks.

Function
Salah satu contoh modular programming adalah function. Function biasanya menjadi salah satu pilihan utama saat mengoding suatu program. Syntax function seperti berikut:
<return value type> <function name> (<data type> <chosen variable>)
Supaya lebih jelas, perhatikan contoh program faktorial sebagai berikut:

#include<stdio.h>
int count(int num)
{
int i,sum=1;
for(i=num;i>0;i--)
          {
          sum=sum*num;
          num--;
}
          printf("%d",sum); 
}

int main()
{
int num;
scanf("%d",&num);
count(num);
}

Dari contoh di atas, pada int main, kita hanya perlu menginput variabel num, misalnya kita input 5 setelah itu kita mendeklarasikan nama function dan parameternya yang akan kita kirim seperti “count(num,t)”. Kemudian di function count, valuenya diterima dan akan langsung mulai loop for perkaliannya.

Selama loop, num akan berkurang karena efek dari “num--“ sehingga akan terjadi perkalian faktorial sampai num menjadi 1. Setelah itu akan di printf hasilnya yaitu 120.

Multi Function
Dari penjelasan sebelumnya, kita bisa membagi suatu program yang kompleks menjadi beberapa function. Cara pembagian function bisa kita samakan seperti lapisan tanah yang berbeda-beda menjadi satu permukaan tanah. Bentuk skema bisa kita anggap seperti ini:
First layer
First function
Second layer
Second function
Third layer
Third function
Main layer
Int main

Contoh dari multi function, misalnya seperti program berikut:
#include<stdio.h>
int divide(int last)
{
          int final=last/2;
          printf("%d\n",final);                 
}

int multi(int *a)
{
          int x=3;
          x=x**a;
          printf("%d\n",x);
          divide(x);
}

int count(int num)
{
          int i,sum=1;
          for(i=num;i>0;i--)
          {
                    sum=sum*num;
                    num--;
          }
          printf(“%d”,sum);
          multi(&sum);
}

int main()
{
int num;
scanf("%d",&num);
count(num);
}

Program ini sama seperti contoh sebelumnya, hanya saja kali ini dibuat menjadi double function program. Kali ini, ketika sum nya sudah didapatkan hasilnya, sum akan dipass ke function multi melalui syntax multi(&sum).

Syntax multi(&sum) ini akan mengirimkan address nya ke pointer a di int multi(int *a). Aksi ini disebut sebagai passing parameter by address. Di function multi, sum akan dikali dengan 3 kemudian di pass ke function divide melalui syntax divide(x).

Syntax divide(x) akan mengirimkan valuenya ke int last di int divide(int last). Aksi ini disebut dengan passing parameter by value. Hasil akhirnya akan dibagi 2 sebelum di print outputnya.

Misalnya kita menginput angka 5 maka pertama-tama faktorial 5 akan di print yaitu 120, lalu di function multi maka akan keluar 360 dan terakhir, akan dibagi dengan 2 di function divide sehingga hasil akhirnya adalah 180.

Recursion
Selanjutnya kita akan membahas tentang recursion. Recursion fungsinya sama seperti function biasa tapi uniknya, recursion adalah function yang memanggil dirinya sendiri.
kita bisa mengumpamakan kalau sistem kerja function itu misalnya, kita mendapat tugas kelompok dan tugas kita dibagi. Jika ada soal yang tidak dimengerti maka kita akan mengerjakan soal yang mudah dan sisanya kita serahkan pada teman kita yang lebih mengerti. Jika tidak mengerti juga, maka ia akan meminta bantuan atau di pass ke temannya yang lain

Sedangkan recursion, perumpamaannya sama seperti function tapi apa yang membedakannya itu adalah ketika teman kita mengerjakan soal yang kita tak mengerti, dia juga kesusahan tapi dia tetap berusaha terus untuk mengerjakannya hingga solusinya ketemu tanpa meminta bantuan ataupun passing ke teman.

Dari kedua perumpamaan tersebut, kita menyimpulkan bahwa function lebih mengarah pada kerjasama antar sesama function sedangkan recursion lebih mengarah ke recursion itu sendiri sampai solusinya ketemu.

Dalam recursion, terdapat dua bagian yaitu base case dan reduction case.
Contoh recursion program faktorial sebagai berikut!

#include<stdio.h>
int fact(int num)
{
          if(num==0)  return 1;
          return num*fact(num-1);
}

int main()
{
          int num,sum;
          scanf("%d",&num);
          sum=fact(num);
          printf("%d",sum);
          return 0;
}

Pada program ini, base case nya adalah syntax “if(num==0)” sebagai syarat pertamanya. Lalu terdapat reduction case yaitu syntax “return num*fact(num-1);”. Di syntax ini lah recursion akan memanggil dirinya berkali-kali sesuai dengan input nya hingga hasil outputnya di dapatkan.

Awalnya, kita menginput num misalnya 5 di scan. Kemudian value num akan di kirim melalui fact(num) tapi sebelum dikirim, kita mendeklarasikan sum=fact(num) agar hasil akhirnya dapat dikirim kembali ke int main.

Di recursion fact, kita membuat pernyataan jika num adalah 0 maka return 1. Jika bukan, maka akan lanjut ke “return num*fact(num-1);”. Syntax “return num*fact(num-1);” akan memanggil dirinya sendiri hingga hasil outputnya dapat. Setelah itu, akan di kembalikan ke int main dan di printf dengan “printf("%d",sum);” sehingga keluar hasilnya yaitu 120.

Maka, sampai sini lah penjelasan bab ini.

Tidak ada komentar:

Posting Komentar