Function dan Rekursif
Rekursif adalah suatu proses yang memanggil dirinya sendiri. Dalam rekursif sebenarnya terkandung pengertian prosedur atau fungsi. Perbedaannya adalah bahwa rekursif bisa memanggil ke dirinya sendiri, tetapi prosedur atau fungsi harus dipanggil lewat pemanggil prosedur atau fungsi. Pemanggilan diri sendiri dilakukan berulang-ulang sampai mencapai titik tertentu.
Implementasi dari rekursif yang paling simple biasanya digunakan untuk menghitung faktorial dari sebuah bilangan atau menghitung bilangan fibonacci. Berikut adalah analogi untuk mencari faktorial dari 5.
Dari contoh analogi diatas, kita dapat menarik kesimpulan :
- Fungsi rekursif selalu memiliki kondisi yang menyatakan kapan fungsi tersebut berhenti. Kondisi ini harus dapat dibuktikan akan tercapai, karena jika tidak tercapai maka kita tidak dapat membuktikan bahwa fungsi akan berhenti, yang berarti algoritma kita tidak benar.
- Fungsi rekursif selalu memanggil dirinya sendiri sambil mengurangi atau memecahkan data masukan setiap panggilannya. Hal ini penting diingat, karena tujuan utama dari rekursif ialah memecahkan masalah dengan mengurangi masalah tersebut menjadi masalah-masalah kecil.
Function
FUNGSI main() dalam C itu mutlak harus ada, karena dari fungsi inilah program akan dimulai. Dalam sebuah program yang terdapat beberapa fungsi, main() boleh diletakkan dimana saja, tapi sebaiknya fungsi main() diletakkan dipaling atas.
Dalam mendefinisikan sebuah fungsi, pasti akan dijumpai dengan:
- Parameter fungsi
- Parameter formal dan aktual
- Variabel lokal dan global
- Isi fungsi
Parameter fungsi adalah sarana komunikasi antar fungsi. Antar fungsi itu sendiri berarti fungsi dengan fungsi lain termasuk antara fungsi dengan fungsi utama. Ada dua jenis parameter dalam hubungannya dengan penggunaan fungsi dalam program, yaitu:
| float hasil (int a, int b) { return (a*b); } |
- Parameter Formal: parameter yang diberi nilai. Parameter formal merupakan parameter yang terdapat pada prototype fungsi atau deklarasi fungsi.
| a dan b pada int a, int b merupakan parameter formal |
| main () { . . . . z = hasil(x , y); . . . . } |
- Parameter Aktual: parameter yang memberi nilai. Parameter actual merupakan parameter dalam daftar pemanggilan fungsi.
| x dan y merupakan parameter aktual |
Pemanggilan Secara Nilai (Call by Value)
Call by Value, merupakan nilai dari parameter actual yang dimasukkan kedalam parameter formal. Dengan cara ini, nilai parameter actual tidak akan berubah walaupun nilai dari parameter formal berubah.
Contoh Call by Value:
| #include <stdio.h> #include <conio.h>
tambah (int c, int d); //prototype fungsi tambah
main()
{ int a, b; a = 2; b = 5;
printf(“Nilai sebelum pemanggilan fungsi \n”);
printf(“a = %d , b = %d \n\n”, a, b); tambah(a, b); //parameter actual printf(“Nilai setelah pemangilan fungsi \n”); printf(“a = %d , b = %d \n\n”, a, b); getchar(); }
tambah(int c, int d) //parameter formal
{ c = c + 4; d = d + 6;
printf(“Nilai fungsi tambah \n”);
printf(“c = %d , d = %d \n\n”), c, d); } |
Jadi, walaupun nilai a dan b pada fungsi tambah berubah menjadi 6 dan 11 dan pada fungsi main di panggil lagi nilai a dan b, maka nilai tersebut akan tetap menjadi nilai awalnya, yaitu 2 dan 5. Artinya, nilai variabel fungsi tambah tidak akan mempengaruhi nilai pada variabel fungsi main.
Pemanggilan Secara Referensi (Call by Reference)
Call by reference merupakan pemanggilan alamat dari suatu variabel ke dalam fungsi. Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi. Call by reference ini mempergunakan fungsi dari pointer untuk memanggil alamat variabel tersebut.
Contoh Call by Reference:
| #include <stdio.h> #include <conio.h>
kurang (int *c, int *d); //prototype fungsi kurang
main()
{ int a, b; a = 4; b = 7;
printf(“Nilai sebelum pemanggilan fungsi \n”);
printf(“a = %d , b = %d \n\n”, a, b); tambah(&a, &b); //parameter actual printf(“Nilai setelah pemangilan fungsi \n”); printf(“a = %d , b = %d \n\n”, a, b); getchar(); }
kurang(int *c, int *d) //parameter formal
{ *c = c* – 2; *d = *d – 4;
printf(“Nilai fungsi kurang \n”);
printf(“c = %d , d = %d \n\n”), *c, *d); } |
Berbeda dengan call by value yang tidak mempengaruhi nilai variabel pada fungsi main, Call by Reference mempengaruhi nilai variabel pada fungsi main. Nilai a = 4, b = 7. Fungsi kurang dipanggil, nilai a dan b mengikuti nilai variabel kurang menjadi 2 dan 3.
| int x() { char nama[25]; int usia; } |
| int main() { tipe_data nama_variabel; } |
Variabel lokal merupakan fungsi dimana variabel local tersebut dideklarasikan. Variabel local jua memiliki sifat dinamis / otomatis yang dideklarasikan didalam suatu fungsi.
Contoh:
Ingat, setiap variabel HARUS diletakan dibawah tanda kurung kurawal ( { )
Variabel local hanya berfungsi di dalam blok saja. Misalnya kalau dari contoh diatas, maka variabel tersebut hanya berlaku pada blok int main saja.
| #include <stdio.h>
char nama[25];
int usia;
int coba()
{ usia = usia + 5 return usia; }
int main()
{ return 0; } |
Variabel global merupakan fungsi yang dideklarasikan diluar semua fungsi, dikenali oleh semua fungsi, selalu ada selama program dijalankan dan memiliki sifat statis.
| #include <stdio.h>
//<iniialisasi variabel global>
int main()
{ return 0; } |
Contoh:
Jadi, variabel global pada contoh tersebut akan berlaku
pada semua fungsi contoh disamping, variabel usia bisa
digunakan dalam fungsi coba dan fungsi main.
pada semua fungsi contoh disamping, variabel usia bisa
digunakan dalam fungsi coba dan fungsi main.
| <tipe return> NamaFungsi (Argumen1, Argumen2, …….) { Pernyataan1; Pernyataan2; } |
Untuk struktur fungsi tipe return, deklarasinya seperti ini
Comments
Post a Comment