Anda di halaman 1dari 16

FUNGSI REKURSIF

ARRANGED AND DELIVERED BY:


INTAN SULISTYANINGRUM SAKKINAH, S.PD., M.ENG
NIP. 199510132022032017
DEFINISI

• REKURSIF ADALAH SUATU PROSES ATAU PROSEDUR DARI FUNGSI YANG MEMANGGIL DIRINYA
SENDIRI SECARA BERULANG-ULANG
• KARENA PROSES DALAM REKURSIF INI TERJADI SECARA BERULANG-ULANG MAKA HARUS ADA
KONDISI YANG MEMBATASI PENGULANGAN PERSEBUT, JIKA TIDAK MAKA PROSES TIDAK AKAN
PERNAH BERHENTI SAMPAI MEMORI YANG DIGUNAKAN UNTUK MENAMPUNG PROSES
TERSEBUT TIDAK DAPAT MENAMPUNG LAGI/PENUH
KELEBIHAN FUNGSI REKURSIF

• PROGRAM MENJADI LEBIH SINGKAT


• PADA BEBERAPA KASUS, LEBIH MUDAH MENGGUNAKAN FUNGSI REKURSIF, CONTOHNYA:
PANGKAT, FACTORIAL, DAN FIBONACCI, DAN BEBERAPA PROSES DERET LAINNYA.
• FUNGSI REKURSIF LEBIH EFISIEN DAN CEPAT DIBANDINGKAN PROSES SECARA ITERATIF.
KEKURANGAN FUNGSI REKURSIF

• MEMAKAN MEMORI LEBIH BESAR, KARENA SETIAP BAGIAN DARI DIRINYA DIPANGGIL, AKAN
MEMBUTUHKAN SEJUMLAH RUANG MEMORI UNTUK PENYIMPANAN.
• REKURSIF SERING KALI TIDAK BISA BERHENTI SEHINGGA MEMORI AKAN TERPAKAI HABIS DAN
PROGRAM BISA HANG
KONSEP REKURSIF PADA JAVA

• PENDEKATAN PEMECAHAN MASALAH REKURSIF MEMILIKI SEJUMLAH ELEMEN YANG SAMA. KETIKA FUNGSI
REKURSIF PADA JAVA INI DIPANGGIL UNTUK MEMECAHKAN MASALAH, SEBENARNYA HANYA MAMPU
MENYELESAIKAN KASUS YANG PALING SEDERHANA, ATAU KASUS DASAR.
• JIKA METHOD INI DISEBUT DENGAN KASUS DASAR, METHOD ITU MENGEMBALIKAN HASIL. JIKA METHOD INI
DISEBUT DENGAN MASALAH YANG LEBIH KOMPLEKS, METHOD TERSEBUT BIASANYA MEMBAGI MASALAH
MENJADI DUA BAGIAN KONSEPTUAL BAGIAN YANG DIKETAHUI CARA MELAKUKANNYA DAN BAGIAN YANG
TIDAK DIKETAHUI BAGAIMANA MELAKUKANNYA.
• UNTUK MEMBUAT REKURSI MENJADI LAYAK, BAGIAN YANG TERAKHIR HARUS MENYERUPAI MASALAH ASLINYA,
TETAPI VERSI YANG SEDIKIT LEBIH SEDERHANA ATAU LEBIH KECIL. KARENA MASALAH BARU INI TERLIHAT SEPERTI
MASALAH ASLI, METHOD INI MEMANGGIL SALINAN BARU DARI DIRINYA UNTUK BEKERJA PADA MASALAH YANG
LEBIH KECIL — INI DISEBUT SEBAGAI PANGGILAN REKURSIF DAN JUGA DISEBUT LANGKAH REKURSI.
KONSEP REKURSIF PADA JAVA (2)

• Langkah rekursi biasanya mencakup pernyataan pengembalian, karena hasilnya akan digabungkan
dengan bagian dari masalah yang diketahui method untuk menyelesaikan untuk membentuk hasil yang
akan diteruskan kembali ke pemanggil asli.
• Langkah rekursi dijalankan sementara pemanggilan method asli masih aktif (mis., Belum selesai
dieksekusi). Ini dapat menghasilkan lebih banyak panggilan rekursif karena method ini membagi setiap
sub-masalah baru menjadi dua bagian konseptual.
• Agar rekursi akhirnya berakhir, setiap kali method memanggil dirinya sendiri dengan versi yang lebih
sederhana dari masalah aslinya, urutan masalah yang lebih kecil dan lebih kecil harus menyatu pada
kasus dasar. Ketika method mengenali kasus dasar, itu mengembalikan hasil ke salinan method
sebelumnya. Urutan pengembalian terjadi sampai pemanggilan method asli mengembalikan hasil akhir
ke pemanggil.
CONTOH KASUS REKURSIF PADA DIREKTORI
KOMPUTER
• Komputer biasanya menyimpan file terkait dalam direktori. Direktori dapat kosong, dapat berisi
file dan / atau dapat berisi direktori lain (biasanya disebut sebagai subdirektori).
• Masing-masing subdirektori ini, pada gilirannya, dapat juga berisi file dan direktori. Jika kita
ingin membuat daftar setiap file dalam direktori (termasuk semua file dalam subdirektori
direktori), kita perlu membuat method yang pertama-tama mendaftar file direktori awal,
kemudian membuat panggilan rekursif untuk membuat daftar file di masing-masing subdirektori
direktori itu.
• Kasus dasar terjadi ketika direktori tercapai yang tidak mengandung subdirektori. Pada titik ini,
semua file dalam direktori asli telah terdaftar dan tidak perlu rekursi lebih lanjut.
FLOWCHART REKURSIF
CONTOH PENERAPAN REKURSIF (1)
• FAKTORIAL DARI BILANGAN BULAT POSITIF N DIDEFINISIKAN SEBAGAI BERIKUT.
• N! = N X (N-1)! UNTUK N > 1 0! = 1 UNTUK N = 0 ATAU N = 1 SECARA PEMROGRAMAN DAPAT
DITULIS SEBAGAI
• FAKTORIAL(0) = 1 (1)
• FAKTORIAL(N) = N*FAKTORIAL(N-1) (2)

Persamaan (2) di atas adalah contoh hubungan rekurens (recurrence relation), yang berarti bahwa nilai
suatu fungsi dengan argumen tertentu bisa dihitung dari fungsi yang sama dengan argumen yang lebih
kecil. Persamaan (1) tidak bersifat rekursif, disebut nilai awal atau basis. Setiap fungsi rekursif paling
sedikit mempunyai satu nilai awal, jika tidak fungsi tersebut tidak bisa dihitung secara eksplisit.
KODE PROGRAM
FLOWCHART FAKTORIAL
CONTOH PENERAPAN REKURSIF (2)
• Bilangan fibbonacci didefinisikan sebagai berikut
• 1 1 2 3 5 8 13 21 34 55 89 …
• Dari barisan tersebut dapat dilihat bahwa bilangan ke-n (n>2) dalam barisan dapat dicari dari dua bilangan
sebelumnya yang terdekat dengan bilangan n, yaitu bilangan ke-(n-1) dan bilangan ke-(n-2), sehingga dapat dirumuskan
sebagai
• Fibbonacci(1) = 1 (1)
• Fibbonacci(2) = 1 (2)
• Fibbonacci(n) = fibbonacci(n-1) + fibbonacci(n-2) (3)
• Dengan persamaan (1) dan (2) adalah basis dan persamaan (3) adalah rekurensnya. Dalam beberapa situasi,
pemecahan secara rekursif maupun secara iterative mempunyai keuntungan dan kekurangan masing-masing. Cukup sulit
untuk menentukan mana yang paling sederhana, paling jelas, paling efisien dan paling mudah disbanding yang lain. Boleh
dikatakan pemilihan cara iterative maupun rekursif merupakan kesenangan seorang programmer dan tergantung konteks
permasalahan yang akan dipecahkan sesuai dengan kesanggupan yang bersangkutan.
KODE PROGRAM
FLOWCHART FIBONACCI
TUGAS

1. Buatlah sebuah program yang dapat mengecek bilangan prima atau bukan.
2. Buatlah sebuah program yang dapat menghitung bilangan pangkat.
3. Buatlah sebuah program yang dapat menampilkan kombinasi 2 karakter.
PETUNJUK PENGERJAAN TUGAS

1. Buatlah kode program beserta screenshot hasil kompilasi dari kode program
2. Buat flowchart dan algoritma deskripsi dari kode program berdasarkan soal yang dikerjakan
3. Kode program yang dibuat harus menerapkan fungsi rekursif di dalamnya
4. Kumpulkan di LMS dalam bentuk format .pdf
5. Batas pengumpulan lihat pada LMS, tidak ada toleransi keterlambatan

Anda mungkin juga menyukai