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