Senin, 17 Desember 2018



Function and Recursion
Salam Programmers!

Function
Kali ini kita akan membahas tentang fungsi dan rekursif. Dalam mengkoding Bahasa C, kita terbiasa membuat kodingan kita di dalam fungsi int main. Namun sebenarnya, kita dapat menggunakan atau membuat fungsi baru yang diletakkan di luar int main. Fungsi-fungsi tersebut berfungsi untuk mempermudah kita dalam membaca kodingan yang telah kita buat sehingga terlihat lebih rapih dan mudah untuk difahami. Fungsi dapat disebut juga sebagai modular programming, yang di mana kodingan kita tersebut berbetuk modul-modul sesuai kegunaannya masing-masing.
Langsung saja berikut contoh fungsinya :

#include<stdio.h>
void print (char nama[10]){
            printf("Selamat Belajar %s!!!\n", nama);
}

int main(){      
            char nama[10] = "Semua";    
            print(nama);

            return 0;
}

Dari kodingan di atas ini jika dicompile akan menghasilkan :






Dalam kodingan terdapat tulisan “void print(….)”, ini merupakan syntax dari penulisan fungsi yang dilanjutkan dengan kurung kurawal seperti biasa. Tipe data void merupakan tipe dari fungsinya. Kalian dapat mengganti tipe datanya sesuai dengan kebutuhan. Pada kurung setelah nama fungsi berguna untuk parameter. Parameter tersebut lah yang menjadi bahan dan yang nantinya akan di proses didalam fungsi.

Cara memanggil fungsi juga cukup mudah, dalam kodingan di atas tertulis “print(nama)”. Maksudnya adalah “print” merupakan nama fungsi yang kita akan panggil jadi nama tersebut bisa berubah-ubah sesuai dengan nama fungsi yang telah kalian buat. Selanjutnya, dalam kurung terdapat “nama”, ini merupakan parameter yang ingin kita lempar ke dalam fungsi tersebut sebagai bahan. Untuk catatan, parameter di dalam fungsi dengan di int main haruslah memiliki jumlah dan juga tipe data yang sama. Jika kalian membuat fungsi dengan parameter (int…, int…) maka di dalam int main pun kalian harus memasukkan nama 2 variabel yang memiliki tipe data int pula untuk di proses. Berikut contoh error jika tidak sesuai :














Dapat dilihat bahwa ketika saya memasukkan tipe data int dalam pemanggilan fungsi, compilernya memberi tanda merah yang menandakan bahwa tipe data tidak cocok dengan tipe data yang ada difungsi.

Terakhir sebagai tambahan, ketika kalian ingin membuat sebuah fungsi dengan tipe data selain tipe data “void”, maka haruslah diberikan tulisan “return” yang diikuti dengan nilai yang direturn bisa angka seperti 1, 0, dan sebagainya atau bisa juga return variabel tertentu.
Berikut contohnya :

#include<stdio.h>

void print(char nama[10]){
            printf("Selamat Belajar %s!!!\n", nama);
}

//merupakan contoh fungsi dengan tipe data selain void

int tambah(int angka1, int angka2){
            int hasil;
            hasil = angka1+angka2;
            return hasil; //mengembalikkan nilai dari variabel hasil
}

int main(){
            char nama[10] = "Semua";
            int nilai1 =5;
            int nilai2 =3;
            int hasil;

            print(nama);
            hasil = tambah(nilai1, nilai2);
//nilai dari fungsi ditampung dalam variabel lain yang ada di int main
           
printf("%d", hasil);
            return 0;
}

Recursion

Recursion merupakan sebuah proses fungsi yang memanggil dirinya sendiri. Seperti yang telah dijelaskan tentang fungsi sebelumnya, terdapat “return” yang di mana berfungsi untuk mengembalikkan nilai kepada int main. Namun, dalam rekursif yang direturn adalah nama dari fungsi itu sendiri dengan parameter yang sedikit dirubah. Recursion umumnya memiliki dua struktur. Pertama adalah base case dan kedua adalah proses rekursif. Dalam base case, kita harus menentukan kemungkinan awal dari proses yang ingin kita buat. Base case akan menangkap nilai terkecil dari pola yang ingin kita lakukan. Sedangkan, proses rekursif berisi proses yang dilanjutkan dengan return fungsi itu sendiri. Sebagai contoh, saya ingin membuat pola “A” “ABA” “ABACABA”. Polanya adalah print fungsi sebelumnya dan base case adalah A jika 1. Maka kodingannya akan menjadi :

#include<stdio.h>

void print(int angka){
            int huruf = 64;
            if(angka==1){
                        printf("A");      //merupakan base case
            }else if(angka==2){
                        printf("ABA"); //merupakan base case
            }else{
                        print(angka-1);
                        printf("%c", huruf+angka);
                        return print(angka-1); //proses rekursif
            }          
}

int main(){
           
            int angka;
            int i;    
           
            scanf("%d", &angka);
            printf("Case #%d: ", i);
            print(angka);
            printf("\n");
           
            return 0;
}

Dalam kodingan tersebut, saya menggunakan fungsi yang bertipe int. dalam fungsi tersebut mengapa saya menggunakan 2 base case? Karena jika saya menggunakan 1 base case untuk pola tersebut, maka akan sulit membaca polanya secara menyuluruh. Karena itu saya membuat 2 base case agar lebih terlihat polanya. Lalu pada proses rekursif, terlihat bahwa saya mengembalikkan nilai dari fungsi itu sendiri dengan mengurangi 1 pada parameternya. Itulah yang disebut dengan rekursif. Namun dalam belajar algorithma, tentulah kita memiliki perbedaan dalam menyusunnya. Semua bergantung pada bagaimana kalian memahami suatu pola dan juga kreatifitas kalian.

Demikian lah sedikit pembelajaran tentang fungsi dan rekursif. Semoga pembelajaran ini dapat bermanfaat bagi kalian.

Salam Programmers!

Tidak ada komentar:

Posting Komentar