Fungsi Rekursif

Download Report

Transcript Fungsi Rekursif

Fungsi Rekursif
Dasar Pemrograman
Fungsi Rekursif
• Fungsi Rekursif : fungsi yang memanggil
dirinya sendiri
• Pemanggilan fungsi :
– Dari fungsi main
– Dari fungsi lain
– Dari fungsi itu sendiri  Rekursif
Rekursif
• Generative
– Memecah masalah besar menjadi masalahmasalah kecil
• Structural
– Biasa untuk pengolahan data, terutama struktur
data tree
Fungsi Rekursif
rekursif()
…
void rekursif() {
rekursif();
}
int main() {
rekursif()
…
rekursif()
rekursif()
main()
Kegunaan
• Fungsi rekursif digunakan untuk
menyelesaikan masalah yang kompleks
dengan cara “membelah” menjadi potonganpotongan kecil yang sederhana (Generative)
• Structural : rekursif untuk struktur data
tertentu, contohnya Tree
Perlu diperhatikan
• Tidak semua masalah bisa diselesaikan secara
rekursif
• Fungsi rekursif biasanya lebih lambat
• Fungsi rekursif harus memiliki titik berhenti
• Jumlah maksimal tingkat rekursif ditentukan oleh
sistem operasi
Contoh function rekursif
Hasil program
Kasus : Faktorial
•
•
•
•
•
5! = 5 x 4 x 3 x 2 x 1 = 5 x 4!
4! = 4 x 3 x 2 x 1 = 4 x 3!
3! = 3 x 2 x 1 = 3 x 2!
2! = 2 x 1 = 2 x 1!
1! = 1
Kasus : Faktorial
5! = 5 x 4!
4! = 4 x 3!
Titik berhenti
3! = 3 x 2!
2! = 2 x 1!
1! = 1
5! = 5 x 4 x 3 x 2 x 1
Kasus : Faktorial
faktorial(5)  hasilnya : 120
5 * faktorial(4)  5 * 24 = 120
4 * faktorial(3)  4 * 6 = 24
3 * faktorial(2)  3 * 2 = 6
2 * faktorial(1)  2 * 1 = 2
1
Contoh program
Hasil program
Rekursif vs Iteratif
• Pola rekursif adalah konstruksi program
fungsional yang didasari oleh definisi rekurens
persoalan
• Pola iteratif adalah bagaimana membuat sebuah
pengulangan dengan memanfaatkan menjadi
sebuah aplikasi rekursif.
• Pada pola iteratif, hasil disebut sebagai
akumulator, dimana pada aplikasi rekursif
mencapai basis, akan berhenti dan akumulator
tersebut harus berisi nilai komputasi yang
diinginkan
Tabel perbandingan
Pokok persoalan
Versi Rekursif
Versi Iteratif
Bentuk teks program rekurens
Aplikasi fungsi dalam sebuah
ekspresi sesuai dengan definisi
Aplikasi fungsi untuk
mengubah nilai parameter
yang diharapkan akan
menampung nilai hasil
Basis atau nilai awal
Kondisi basis adalah kondisi
dimana tidak ada lagi aplikasi
rekursif, ekspresi basis adalah
awal komputasi: yaitu
komputasi mulai dilakukan
Kondisi basis adalah kondisi
berhenti dan ekpresi basis
adalah “peniriman” hasil
komputasi lewat parameter
Aplikasi
Tidak perlu memikirkan awal,
inisialisasi, elemen pengontrol.
Fokus persoalan adalah
bagaiamana melakukan
apliasik sebauh fungsi sesuai
dengan definisi dan
spesifikasinya
Harus dipikirkan bagaimana
melakukan inisialisasi dan
elemen pengontrol supaya
kondisi basis tercapai dan nilai
hasil diperoleh.
Tabel perbandingan (lanjt.)
Pokok persoalan
Versi Rekursif
Versi Iteratif
Pola rekurens
Hanya ada satu pola yaitu
berdasarkan rekursif persoalan
Ada dua pola rekurens.
Berdasarkan pencacah, atau
berdasarkan kondisi
parameter. Yang penting
adalah menentukan elemen
pengontrol iterasi yang
menjamin bahwa suatu saat
ietrasi dapat berhenti dan hasil
komputasi dapat diperoleh
Kasus Deret Fibonaci
• Deret fibonacci mempunyai nilai suku-suku
bilangan berikut:
0, 1, 1, 2, 3, 5, 8, 13, 21, ............
• Ciri khusus deret ini adalah tiap-tiap suku
adalah hasil penjumlahan dari nilai dua suku
sebelumnya
Kasus Deret Fibonaci
• untuk mencari bilangan fibonacci ke- 5, maka
urutan pengerjaannya adalah sebagai berikut:
Fibo iteratif vs Fibo rekursif
Iteratif vs Rekursif
• Kesimpulannya.......?