Senin, 07 April 2014

Fungsi Rekursif


FUNGSI REKURSIF

Pada praktikum Algoritma Pemrograman II ini dibahas mengenai Fungsi Rekursif. Apa sih Fungsi Rekursif itu sendiri? Rekursif merupakan alat untuk memecahkan masalah dalam suatu fungsi atau prosedur yang memanggil dirinya sendiri, oleh karena itu algoritma rekursif harus dinyatakan dalam prosedur atau fungsi, karena hanya prosedur dan fungsi yang dapat dipanggil dalam sebuah program. Fungsi mengembalikan sebuah nilai sedangkan prosedur menghasilkan efek netto.  Penggunaan rekursif kadang-kadang harus mengobarkan efisiensi dan kecepatan, disamping itu ada masalah yang sering muncul dalam rekursif yaitu eksekusi yang tidak pernah berhenti. Fungsi rekursif sendiri dapat ditemukan pada fungsi factorial. Secara umum, skema dasar fungsi rekursif yaitu :
Gambar 1. 1. Skema dasar fungsi Rekursif
Peubah x adalah parameter pemanggilan prosedur (dapat berupa parameter by value atau parameter by reference), R1 dan R2 masing-masing adalah prosedur(sekumpulan instruksi) yang dipanggil sebelum dan sesudah pemanggilan rekursif, g adalah fungsi yang fungsi yang mengubah nilai parameter x dan T  adalah fungsi untuk kasus basis dan N adalah fungsi jika kasus basis tercapai.
Untuk lebih jelasnya mengenai fungsi rekursif, berikut ini adalah listring program yang dibuat pada saat praktikum hari ini :
Gambar 1. 2. Source code fungsi faktorial
Didalam fungsi faktorial terdapat instruksi-instruksi yang meliputi :
a. int hasil; : yaitu mendeklarasikan variabel baru hasil untuk menampung hasil dari proses perhitungan data.
b. if (a<=1) , {hasil = 1;} : sama dengan fungsi FPB, pada fungsi faktorial juga menggunakan statement pengendalian perintah if untuk memilih satu dari dua alternatif jawaban yang tersedia yaitu dengan kondisi a lebih kecil sama dengan 1 maka hasil sama dengan 1, tetapi jika a tidak sesuai dengan kondisi yaitu jika a lebih besar sama dengan 1 maka program akan mengerjakan pernyataan ke-2 yaitu else {hasil = a*faktorial(a-1);} artinya hasil diperoleh dari variabel a dikalikan dengan faktorial(a-1);.
c. return (hasil); : digunakan untuk mengembalikan nilai hasil dari pemanggilan fungsi faktorial. Nilai yang dihasilkan kemudian dibawa ke cout << "Faktorial " << n <<"! = " << faktorial(n);.
Setelah membuat program fungsi faktorial, selanjutnya membuat program untuk menghitung kombinasi. Berikut source code programnya :
Gambar 1. 3. Source code fungsi kombinasi
Berikut ini penjelasan dari instruksi-instruksi yang berada didalam fungsi kombinasi yaitu :
a. if (a < b) ,return 0; :fungsi kombinasi juga menggunakan statement  pengendalian perintah if dengan kondisi true dimana jika variabel a lebih kecil dari b maka nilai yang dihasilkan akan mengembalikan nilai nol, tetapi jika kondisi false else ,  return( faktorial (a) / (faktorial (b) * faktorial (a-b))); maka nilai yang akan dikembalikan adalah hasil dari nilai pemanggilan fungsi faktorial.
b. Setelah nilai didapat, nilai tersebut dikembalikan atau dibawa ke  cout << "Kombinasi ("<<a<<","<<b<<") = " << kombinasi(a, b);.
Setelah membuat fungsi kombinasi selanjutnya membuat source code program permutasi. Source code programnya yaitu :
Gambar 1. 4. Source code fungsi permutasi
Didalam fungsi permutasi terdapat instruksi-instruksi yang meliputi :
a. if (n<r) ,  return 0; : dalam fungsi ini masih menggunakan perintah if dengan kondisi jika variabel n lebih kecil dari variabel r maka akan mengembalikan nilai nol, tetapi jika kondisi false yaitu n lebih besar dari r maka pernyataan ke-2 yang akan dikerjakan yaitu return (faktorial(n) / faktorial (n-r)); , pada saat mengerjakan pernyataan ini, terjadi pemanggilan fungsi faktorial.
b. Setelah mendapatkan nilai dari proses ini, kemudian  nilai yang dihasilkan tersebut dibawa ke cout << "Permutasi dari ("<<n<<","<<r<<") = " << permutasi(n, r);.
Selain semua fungsi yang telah saya tuliskan diatas, selanjutnya saya akan menulis fungsi FPB yang juga menggunakan rekursif, berikut source code programnya :
Gambar 1. 5. Source code fungsi FPB
Penjelasanya yaitu user meng-input data bilangan ke-1 dengan variabel bil1 bertipe data integer dan bilangan ke-2 dengan variabel bil2 bertipe data integer sesuai dengan pendeklarasian variabel int bil1, bil2;. Setelah meng-input bilangan ke-1 dan ke-2, kemudian program akan menampilkan hasil dari FPB dari data yang diinputkan cout << "Faktor Persekutuan Terbesar dari "<<bil1<<" dan "<<bil2<<"  : " << FPB(bil1, bil2); pada proses ini case 1 memanggil fungsi FPB yang telah dideklarasikan sebelumnya. Fungsi FPB berisi instruksi-instruksi untuk mencari faktor persekutuan terbesar dari data yang telah diinputkan, instruksi-instruksi pada fungsi FPB meliputi :
a. int hasil; : membuat variabel baru yaitu hasil dengan tipe data integer. Variabel ini akan digunakan untuk menampung data yang telah dilakukan perhitungan.
b. if (y == 0) , hasil = x; : menggunakan statement  pengendalian perintah if yang digunakan untuk memilih satu dari dua alternatif jawaban yang tersedia yaitu jika kondisi variabel y yang di-input sama dengan nol maka hasilnya  variabel x, tetapi jika kondisi y  yang diinputkan tidak sama dengan nol maka pernyataan kedua yang dikerjakan yaitu else , hasil = FPB(y,(x%y)); misalnya saya menginputkan y=4 dan x=12 maka program akan mengecek pada pernyataan ke-1, karena y tidak sama dengan nol maka program mengerjakan pernyataan ke-2 yaitu hasil = FPB(y,(x%y)); sehingga hasil=FPB(4,(12%4)) yaitu FPB(4,(0)) maka return(hasil); yaitu mengembalikan nilai yang telah didapat dari hasil yaitu 4.
Oke itu tadi fungsi-fungsi yang dibuat pada saat praktikum algoritma pemrograman II. Pada praktikum asdos juga memberikan sebuah tugas yaitu mengabungkan fungsi-fungsi diatas menjadi sebuah menu. Tetapi pada saat praktikum aku belum bisa sempat menyelesaikan tugas itu hehe so next time mungkin aku akan memposting listing programnya :D (Puspita).

Tidak ada komentar:

Posting Komentar