Senin, 17 Desember 2018

Function and Recursion

Modular Programming = program yang dibagi menjadi modul-modul

Modul dalam bahasa c diimplementasikan ke suatu fungsi yang dimana fungsi tersebut dibentuk melalui pengelompokkan beberapa statement untuk melakukan sesuatu

Modul diperlukan bila beberapa kumpulan statement oleh kode berbeda dalam suatu program biasanya disebut juga sub-program
Biasanya kalau dibentuk menjadi modul maka lebih mudah dibaca oleh orang lain

Kelebihan Modular Programming 
1. Desainnya yang lebih mudah dibaca karena suatu program yang dibagi menjadi modul-modul kecil
2. Dapat dilakukan lebih dari 1 programmer 
3. Lebih mudah dalam melakukan debug karena dibagi-bagi jadi kesalahan atau bug mudah dideteksi
4. Modifikasi lebih mudah dilakukan
5. Lebih mudah didokumentasikan

Library vs User-defined Function

Fungsi dalam bahasa C dibagi 2 : 
1. Library function (udah ada dalam bahasa c)
2. User-defined function (ditentuin user)

Contoh Library Function
printf() di library stdio.h
strstr() di library string.h
tan() di library math.h

Function Contruction

Syntax :

return-value-type function-name (parameter-list)
{
statements;
}

return-value-type : nilai dari data yang dikembalikan 
jika ga diisi maka otomatis tipe data default akan digunakan 
jika jenisnya void maka fungsi nilai tidak akan dikembalikan

parameter-list : list value yang dikirim dari function initiator

Function di C biasanya letaknya diatas initiator/caller atau main program. Kalau tidak , gunakan Function-Prototype

Tujuan Function-Prototype :
=> untuk mastiin bahwa suatu fungsi diketahui oleh initiator yang akan memvalidasi parameter

Syntax :

return-value-type function-name(parameter-list);

Bisa ditulis : 
int maximum (int a,int b) 

Identifier Scooping 

1. Local 
2. Global

Identifier Scooping Local = di dalam int main atau function

misalkan 
int main ()
{
int input;

return 0;
}

int input diatas termasuk Identifier Scooping Local karena hanya dikenali di dalam int main

Sedangkan yang global biasanya di luar int main 

misalkan 

int x;

int tambah (int a, int b)
{
return a+b;
}

int main ()
{
int input;

return 0;
}

int x diatas berarti termasuk Identifier Scooping Global karena tak hanya dikenali di int main tetapi misal dibuat function baru yaitu int tambah int x ini dapat dipakai meskipun kita tidak declare didalam function tersebut

Passing Parameter 
Jika tidak bisa / belum cukup menggunakan modul maka bisa dilakukan dengan passing parameter

Passing parameter :
1. By-Value : nilainya dikirim ke modul lain
2. By-Location : alamatnya dikirim ke modul lain

Recursive : Function yang memanggil dirinya sendiri biasanya dipakai dalam menyelesaikan recursive-problem misalkan bilangan fibonacci atau faktorial

Komponen Recursive:
1. Base-case : yang return valuenya pasti tetap dan tidak akan berubah
2. Reduction-step : urutan nilai input yang bila diurutkan secara konvergen maka ia akan menemukan nilainya setelah menyentuh base-case

Misalkan  faktorial 
Base casenya :
f(0) = 1
f(1) = 2

Reduction-step:
f(n) = n * f(n-1) !

Meskipun recursive membuat kodingan yang kita buat lebih simple dan ringkas namun ada beberapa kerugian memakai recursive yaitu :

1. Konsumsi Memory lebih banyak daripada Iterative (membuat program bertahap dari atas ke bawah)
2. Membutuhkan waktu yang lebih karena dipanggil hingga menyentuh base case baru return nilai yang diinginkan

Cara efektif menggunakan Recursive :
1. Jika problem sulit diselesaikan dengan iterative
2. Bila problem lebih efisien menggunakan recursive dibanding iterative
3. Apabila efiesiensi tidak diperhatikan 
4. Apabila efisiensi dan waktu execution tidak menjadi masalah utama

Note : lebih baik menggunakan pendekatan iterative meski agak terkesan ribet karena kecepatan execution dan kecepatan memorinya lebih baik daripada yang kodingan terlihat ringkas menggunakan recursive

Tidak ada komentar:

Posting Komentar