0% menganggap dokumen ini bermanfaat (0 suara)
151 tayangan11 halaman

Modul IV Dustruc

Diunggah oleh

k9xnp9hfn8
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
151 tayangan11 halaman

Modul IV Dustruc

Diunggah oleh

k9xnp9hfn8
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 11

BAB I

PENDAHULUAN

1.1 LATAR BELAKANG


Rekursif adalah salah satu konsep dasar dalam ilmu komputer dan
pemrograman yang mendasari banyak algoritma dan struktur data. Latar belakang
tentang rekursif melibatkan pemahaman tentang asal-usulnya, penggunaan dalam
pemrograman, serta konsep dan prinsip yang mendasarinya. Rekursif digunakan
secara luas dalam pemrograman untuk menyelesaikan masalah yang dapat
dipecahkan dengan cara memecahnya menjadi submasalah yang lebih kecil.
Penggunaan rekursif umumnya terlihat dalam algoritma seperti pencarian dalam
struktur data rekursif (seperti pohon), algoritma pembagian dan penaklukan, dan
algoritma untuk masalah yang secara alamiah rekursif, seperti pengurutan dan
pencarian.
Rekursif merupakan alat untuk memecahkan masalah dalam suatu fungsi
atau procedure yang memanggil dirinya sendiri. Secara teori semua masalah yang
dapat dipecahkan dengan r tanpa rekursif. Meskipun dalam kenyataan ini, rekursif
sangat bermanfaat sebab beberapa masalah mempunyai solusi yang sulit tanpa
menggunakan rekursif. Penggunaan rekursif kadang-kadang harus mengorbankan
efisiensi dan kecepatan, disamping itu ada masalah yang sering muncul dalam
rekursif, yaitu eksekusi yang tidak pernah berhenti, akibatnya memori tumpukan
akan habis dan computer hank. Pada dasarnya rekursif sering digunakan dalam
perhitungan matematika, sebagai contoh pertimbangan fungsi factorial dan juga
bilangan Fibonacci.

1.2 TUJUAN PRAKTIKUM


Dengan diadakannya praktikum kali ini, mahasiswa diharapkan dapat :
A. Memahami algoritma rekursif
B. Menjelaskan bentuk algoritma rekursif
C. Mendeskripsikan parameter-parameter pada algoritma rekursif
D. Membandingkan algoritma rekursif dengan algoritma non rekursi
BAB II
DASAR TEORI

2.1 DEFINISI REKURSIF


Rekursif adalah metode penyelesaian masalah di mana solusi dari suatu
masalah bergantung pada solusi dari sub-masalah yang lebih kecil dan sejenis.
Istilah ini berasal dari bahasa Latin "recursio" yang berarti "kembali". Dalam
konteks pemrograman, sebuah fungsi disebut rekursif jika fungsi tersebut
memanggil dirinya sendiri baik secara langsung maupun tidak langsung.
Pemanggilan langsung terjadi ketika sebuah fungsi memanggil dirinya sendiri
dalam definisinya, sedangkan pemanggilan tidak langsung terjadi ketika sebuah
fungsi memanggil fungsi lain yang pada gilirannya memanggil fungsi pertama
kembali. Rekursif sering digunakan dalam situasi di mana suatu masalah dapat
dipecahkan dengan memecahnya menjadi satu atau lebih sub-masalah yang
identik dalam bentuk tetapi lebih kecil dalam ukuran, dan kemudian
menggabungkan hasil sub-masalah tersebut untuk mendapatkan solusi akhir.
Fungsi rekursif adalah proses di mana suatu fungsi memanggil dirinya
sendiri secara langsung atau tidak langsung. Dengan menggunakan algoritma
rekursif, masalah tertentu dapat diselesaikan dengan cukup mudah. Fungsi
rekursif juga diartikan sebagai fungsi yang memanggil dirinya sendiri secara
berulang dalam proses pengolahan data atau pemanggilan fungsi. Pada beberapa
kasus fungsi rekursif bisa lebih mudah dipahami dan sederhana daripada dengan
solusi iteratif. Maka dari itu penggunaan fungsi ini dapat membantu mengurangi
jumlah kode yang dibutuhkan serta memudahkan untuk dibaca. Di dalam sistem
pemrograman sendiri, rekursif memiliki dua jenis. Yakni fungsi rekursif langsung
dan tidak langsung.
Dalam konteks pemrograman, fungsi rekursif adalah suatu bentuk perulangan
yang tidak melibatkan iterasi. Pada dasarnya, fungsi rekursi adalah fungsi biasa
seperti definisi fungsi pada umumnya. Ia dapat dipanggil, menerima parameter,
mengembalikan nilai, dan memiliki sifat yang serupa. Namun, yang
membedakannya adalah penggunaan dirinya sendiri yang memunculkan efek
perulangan. Karena fungsi ini memanggil dirinya sendiri, yang pada akhirnya
menciptakan efek pengulangan. Proses ini dapat berhenti saat kondisi tertentu
terpenuhi, atau bisa juga menjadi tak terbatas, atau bahkan menghasilkan
kesalahan karena pemanggilan fungsi yang tidak berujung. Fungsi rekursif selalu
memiliki kondisi yang menyatakankapan fungsi tersebut berhenti. kondisi ini
harus dapat dibuktikan akan tercapai , karena jika tidak tercapai makakita tidak
akan dapat membuktikan bahwa fungsi akan berhenti,yang berarti algoritma tidak
benar. Fungsi rekursif selalu memanggil dirinya sendirisambilmengurangi atau
memecahkan data masukan setiappanggilannya.Hal ini penting, karena tujuan
utama dari rekursif adalah memecahkan masalah dengan mengurangi masalah
tersebut menjadi masalah-masalah kecil. Iterasi merupakan suatu teknik
perulangan yang digunakanpada penulisan program. Perulangan yang dimaksud
adalah seperti perintah-perintah while do ataupun for do. Iterasi dan rekrusif itu
sama-sama digunakan untuk proses perulangan. Intinya adalah jika sebuah
masalah dapat diselesaikan dengancara iteratif maka gunakan iteratif. Jika
penyelesaian dengan menggunakan iteratif memerlukan algoritma yang relatif
rumit maka dapat dicoba dengan pendekatan rekursif karena rekursif memerlukan
sumber daya yang lebih banyak.

2.2 KOMPONEN REKURSIF


Sebuah fungsi rekursif terdiri dari dua komponen utama, yaitu basis rekursif
dan langkah rekursif. Basis rekursi adalah kondisi terminal yang menghentikan
pemanggilan rekursif, memastikan bahwa fungsi tidak akan terus-menerus
memanggil dirinya sendiri tanpa batas. Basis rekursi biasanya merupakan kasus
paling sederhana dari masalah yang dapat diselesaikan langsung tanpa
pemanggilan rekursif lebih lanjut. Misalnya, dalam konteks perhitungan faktorial,
basis rekursinya adalah ketika nilai input adalah nol, di mana faktorial dari nol
adalah satu, yang merupakan nilai konstan dan tidak memerlukan perhitungan
lebih lanjut. Langkah rekursi adalah bagian dari fungsi yang mengandung
pemanggilan rekursif. Langkah ini memecah masalah yang lebih besar menjadi
sub-masalah yang lebih kecil dan serupa, dan kemudian memanggil fungsi
tersebut dengan sub-masalah ini. Langkah rekursi harus dirancang sedemikian
rupa sehingga setiap pemanggilan mendekatkan masalah ke basis rekursi,
sehingga memastikan bahwa pemanggilan rekursif akan berhenti setelah beberapa
iterasi. Berikut adalah komponen-komponen penting dari fungsi rekursif :
A. Base Case (Kasus Dasar)
Base case adalah kondisi yang menghentikan rekursi. Ini adalah kondisi
dimana fungsi tidak lagi memanggil dirinya sendiri dan mulai mengembalikan
hasil. Base case sangat penting untuk mencegah rekursi berjalan tanpa henti
(infinite recursion).
B. Recursive Case (Kasus Rekursif)
Recursive case adalah kondisi di mana fungsi memanggil dirinya sendiri. Ini
adalah bagian dari fungsi yang memecahkan masalah menjadi submasalah yang
lebih kecil dan memanggil fungsi dengan submasalah ini.
C. Progression Towards Base Case (Kemajuan Menuju Kasus Dasar)
Setiap pemanggilan rekursif harus memodifikasi parameter secara
sedemikian rupa sehingga akhirnya mencapai base case. Tanpa ini, fungsi tidak
akan pernah mencapai base case dan akan menyebabkan infinite recursion.

2.3 PROSES REKURSIF


Proses rekursif melibatkan beberapa tahap pemanggilan fungsi dan
pengembalian nilai. Setiap kali fungsi rekursif dipanggil, sebuah stack frame baru
dibuat di memori. Stack frame ini menyimpan informasi mengenai variabel lokal
fungsi dan alamat pengembalian yang menunjukkan dari mana fungsi dipanggil.
Pada saat fungsi rekursif dipanggil, stack frame baru ditambahkan ke tumpukan
(stack). Proses ini berlanjut sampai basis rekursi tercapai. Ketika basis rekursi
tercapai, tidak ada lagi pemanggilan rekursif dan fungsi mulai mengembalikan
nilai yang dihitung. Nilai yang dikembalikan ini kemudian digunakan oleh
pemanggilan sebelumnya untuk menyelesaikan perhitungannya, dan stack frame
mulai di-pop dari tumpukan satu per satu, dengan nilai yang dihitung
dikembalikan ke pemanggilan sebelumnya hingga seluruh pemanggilan rekursif
selesai dan tumpukan kembali kosong. Penting untuk merancang fungsi rekursif
dengan hati-hati untuk menghindari terlalu banyak pemanggilan rekursif yang
dapat menyebabkan stack overflow, yaitu ketika tumpukan memori habis karena
terlalu banyak stack frame yang dibuat. Penggunaan rekursif, yaitu :
A. Menghitung Pangkat
Rekursi dapat digunakan untuk menghitung pangkat dengan cara
memanggil fungsi pangkat untuk nilai yang lebih kecil.
B. Menghitung Faktorial
Rekursi dapat digunakan untuk menghitung faktorial dengan cara
memanggil fungsi faktorial untuk nilai yang lebih kecil.
C. Menghitung Deret Fibonacci
Rekursi dapat digunakan untuk menghitung deret Fibonacci dengan cara
memanggil fungsi Fibonacci untuk nilai yang lebih kecil.
Dengan menggunakan rekursi, programmer dapat menyelesaikan masalah
yang kompleks dengan cara mengurangi masalah menjadi yang lebih kecil sampai
mencapai suatu kasus dasar yang dapat dihitung secara langsung. Namun, rekursi
harus digunakan dengan hati-hati karena memiliki beberapa kekurangan yang
perlu dipertimbangkan.

2.4 KEUNGGULAN DAN KEKURANGAN REKURSIF


Rekursif memiliki beberapa keunggulan yang signifikan dalam
pemrograman. Salah satu keunggulan utamanya adalah kesederhanaan dalam
memahami dan mengimplementasikan algoritma untuk masalah tertentu. Banyak
algoritma yang bekerja pada struktur data seperti pohon dan graf lebih mudah
diimplementasikan dengan rekursif karena pendekatan rekursif secara alami
sesuai dengan struktur hierarkis dari data tersebut. Selain itu, rekursif
memungkinkan dekomposisi masalah besar menjadi sub-masalah yang lebih kecil
dan lebih mudah dikelola. Ini sangat berguna dalam memecahkan masalah
kompleks dengan cara yang lebih sederhana dan terstruktur. Namun, rekursif juga
memiliki kelemahan. Salah satu kelemahan utama adalah overhead memori yang
signifikan karena setiap pemanggilan rekursif memerlukan stack frame baru. Jika
masalah tidak dipecahkan dengan benar, atau jika basis rekursi tidak pernah
tercapai, ini dapat menyebabkan stack overflow yang mengakibatkan program
crash. Selain itu, rekursif dapat kurang efisien dibandingkan dengan pendekatan
iteratif karena banyaknya pemanggilan fungsi dan pembuatan stack frame yang
mengakibatkan penggunaan memori dan waktu eksekusi yang lebih besar. Oleh
karena itu, penting untuk mempertimbangkan kelebihan dan kekurangan ini saat
memutuskan untuk menggunakan pendekatan rekursif dalam pemrograman.
Menggunakan rekursi dalam pemrograman memiliki sejumlah kelebihan
dan kekurangan yang perlu dipertimbangkan tergantung pada konteks aplikasi dan
struktur data yang digunakan. Kelebihan lain dari rekursif, yaitu :
A. Sederhana dan Elegan
Solusi rekursif sering kali lebih sederhana dan lebih mudah dipahami
daripada solusi iteratif, terutama untuk masalah yang alamiah rekursif.
B. Pemecahan Masalah yang Alami
Rekursi cocok untuk masalah yang secara alami dapat dipecah menjadi
submasalah yang serupa dengan masalah asli, seperti traversal pohon atau
algoritma pembagian dan penaklukan.
C. Pengkodean yang Lebih Singkat
Kadang-kadang, solusi rekursif dapat diimplementasikan dalam kode yang
lebih singkat dan lebih mudah dimengerti dibandingkan dengan solusi iteratif
yang setara.
D. Fleksibilitas
Rekursi memungkinkan penanganan struktur data rekursif seperti pohon dan
grafik dengan cara yang alami dan elegan.
Kekurangan rekursif adalah beberapa hal yang perlu dipertimbangkan
ketika menggunakan metode rekursif dalam pemrograman:
1. Tidak Bisa Melakukan Nested Loop
Rekursif tidak dapat melakukan looping bersarang, yang dapat membuat
kode menjadi kompleks dan sulit dipahami.
2. Membuat Fungsi Sulit Dipahami
Rekursif dapat membuat fungsi menjadi sulit dipahami karena fungsi
memanggil dirinya sendiri secara terus menerus. Hal ini dapat membuat kode
menjadi berbelit-belit dan sulit untuk di-debug.
3. Memerlukan Stack yang Lebih Besar
Rekursif memerlukan stack yang lebih besar karena setiap kali fungsi
dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack. Jika
stack tidak cukup, dapat menyebabkan error "Stack Overflow".
4. Proses yang Berbelit-Belit
Rekursif dapat membuat proses yang berbelit-belit karena terdapat
pemanggilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk.
Hal ini dapat membuat kode menjadi sulit untuk di-debug dan dipahami.
5. Keterbatasan dalam Penggunaan
Rekursif tidak cocok untuk semua jenis permasalahan dan dapat memiliki
keterbatasan dalam penggunaannya. Fungsi rekursif harus dipahami dengan baik
dan digunakan dengan hati-hati agar tidak menyebabkan masalah yang lebih
besar.

2.5 REKURSIF DALAM PEMROGRAMAN DINAMIS


Rekursif sering digunakan dalam kombinasi dengan pemrograman dinamis
untuk meningkatkan efisiensi. Pemrograman dinamis adalah teknik yang
digunakan untuk menghindari perhitungan ulang sub-masalah yang sama dengan
menyimpan hasil dari sub-masalah tersebut untuk digunakan kembali nanti.
Teknik ini dikenal sebagai memoization. Dengan memoization, hasil dari
pemanggilan rekursif yang telah dihitung disimpan dalam struktur data, seperti
array atau hash table, sehingga pemanggilan berikutnya dapat langsung
mengembalikan hasil yang disimpan daripada menghitungnya kembali. Contoh
yang umum adalah perhitungan bilangan Fibonacci, di mana setiap bilangan
Fibonacci adalah jumlah dari dua bilangan Fibonacci sebelumnya. Dengan
menggunakan memoization, hasil dari setiap bilangan Fibonacci yang telah
dihitung dapat disimpan dan digunakan kembali, sehingga menghindari
perhitungan ulang dan mengurangi waktu eksekusi secara signifikan. Dalam
implementasi rekursif sederhana, algoritma akan menghitung kembali nilai deret
Fibonacci untuk setiap bilangan, yang menghasilkan banyak perhitungan berulang
yang tidak efisien. Namun, dengan menggunakan pemrograman dinamis, hasil
perhitungan untuk setiap bilangan Fibonacci dapat disimpan dan diakses kembali
saat dibutuhkan, mengurangi jumlah perhitungan yang diperlukan.
BAB III
PERMASALAHAN

3.1 PERMASALAHAN
A. Buatlah sebuah program fungsi rekursif bilangan Fibonacci dengan
menggunakan Bahasa pemrograman C++
BAB IV
IMPLEMENTASI

4.1 IMPLEMENTASI
1. Berikut ini adalah hasil dari contoh program fungsi rekursif bilangan
Fibonacci dengan menggunakan pemrograman C++

Gambar 4.1 Program rekursif bilangan Fibonacci


Pada gambar 4.1 terdapat sebuah program fungsi rekursif yang menghitung
bilangan Fibonacci sesuai inputan. Berikut merupakan hasil ouput dari program
diatas :

Gambar 4.2 Hasil Ouput Program


Gambar diatas merupakan hasil output dari program rekursif yang
menghitung bilangan Fibonacci.
BAB V
PENUTUP

5.1 KESIMPULAN
Dalam modul ini, dapat disimpulkan bahwa rekursi merupakan suatu
pendekatan yang fundamental dalam pemrograman yang memungkinkan
pemecahan masalah dengan struktur yang terorganisir dan berulang. Melalui
pemahaman konsep dasar seperti basis rekursif dan langkah rekursif, serta
penerapan teknik optimisasi seperti memoization, pengembang dapat menghadapi
berbagai tantangan pemrograman dengan cara yang lebih sistematis dan efisien.
Meskipun rekursi menawarkan keunggulan dalam kejelasan logika dan
kemampuan untuk menangani struktur data hierarkis, penting untuk diingat bahwa
penggunaannya harus dipertimbangkan dengan hati-hati, terutama terkait dengan
potensi masalah seperti stack overflow dan overhead memori. Dengan
mengembangkan keterampilan dalam rekursi melalui latihan dan penelitian yang
berkelanjutan, pengembang dapat meningkatkan keahlian mereka dalam
menyelesaikan berbagai tantangan pemrograman dengan pendekatan yang lebih
elegan dan efektif.

5.2 SARAN
Untuk menjadi pemrogram yang lebih mahir dalam menggunakan rekursif,
penting untuk terus berlatih dan menggali lebih dalam konsep ini melalui
pembacaan, studi kasus, dan implementasi proyek-proyek kecil. Pelajari teknik
optimisasi seperti memoization dan pemrograman dinamis untuk meningkatkan
efisiensi rekursif Anda, terutama saat menangani masalah yang kompleks atau
besar. Pelajari contoh kasus penggunaan rekursif dalam berbagai bidang,
termasuk algoritma, struktur data, dan pemrosesan gambar atau suara.
Bergabunglah dengan komunitas pemrograman atau forum online yang membahas
rekursif untuk bertukar pengetahuan, pengalaman, dan tips dengan sesama
pengembang.
DAFTAR PUSTAKA

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to
Algorithms (3rd ed.). The MIT Press.
Sedgewick, R., & Wayne, K. (2011). Algorithms (4th ed.). Addison-Wesley.
Knuth, D. E. (1997). The Art of Computer Programming, Volume 1: Fundamental
Algorithms (3rd ed.). Addison-Wesley.
Horowitz, E., Sahni, S., & Anderson-Freed, S. (2007). Fundamentals of Data
Structures in C (2nd ed.). Silicon Press.
Dasgupta, S., Papadimitriou, C. H., & Vazirani, U. V. (2008). Algorithms.
McGraw-Hill Education.

Anda mungkin juga menyukai