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

Modul 4 - MOH RIFQI MSA

Modul 4 orcom

Diunggah oleh

Rifki Mahbubilla
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)
6 tayangan11 halaman

Modul 4 - MOH RIFQI MSA

Modul 4 orcom

Diunggah oleh

Rifki Mahbubilla
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 1

PENDAHULUAN

1.1 LATAR BELAKANG

Rekursif adalah konsep fundamental dalam ilmu komputer di mana suatu fungsi
atau prosedur memanggil dirinya sendiri sebagai bagian dari prosesnya. Konsep ini
pertama kali diperkenalkan oleh matematikawan Gottlob Frege pada awal abad ke-20,
dan kemudian secara luas diterapkan dalam pemrograman komputer. Salah satu contoh
paling terkenal dari penggunaan rekursi adalah dalam definisi matematika dari bilangan
Fibonacci, di mana setiap angka dalam urutan tersebut dihitung dengan menjumlahkan
dua angka sebelumnya. Fungsi rekursif dapat digunakan untuk menghitung urutan
Fibonacci ini dengan cara yang elegan. Rekursif juga sering digunakan dalam
penyelesaian masalah yang melibatkan struktur data seperti pohon dan grafik. Misalnya,
dalam penelusuran pohon biner, rekursi digunakan untuk menelusuri setiap simpul
dalam pohon secara efisien. Namun, penggunaan rekursif harus dilakukan dengan
hati-hati karena dapat menyebabkan kelebihan beban memori dan kinerja. Ketika
sebuah fungsi memanggil dirinya sendiri secara berulang, ini dapat mengakibatkan
tumpukan panggilan yang dalam, yang pada akhirnya dapat menghabiskan memori dan
menyebabkan program keluar karena kesalahan “stack overflow”. Untuk
menghindari masalah ini, diperlukan kasus dasar yang jelas di mana rekursif berhenti,
serta perencanaan yang bijaksana untuk memastikan bahwa panggilan rekursif tidak
berlanjut tak terbatas. Dalam beberapa kasus, teknik rekursif dapat diganti dengan
pendekatan iteratif yang lebih efisien

1.2 TUJUAN PRAKTIKUM

Tujuan dari praktikum ini yakni sebgai berikut

A. Memahami Algoritma Rekursif

B. Menjelaskan bentuk algoritma Rekursif

C. Mendekskripsikan Parameter-Parameter pada algoritma Rekursif

D. Membandingkan algoritma Rekursif dengan algoritma non Rekursif


BAB II
DASAR TEORI

2.1 REKURSIF

Rekursif terutama berakar dalam konsep matematika dari definisi secara induktif.
Rekursif memanfaatkan ide bahwa kita dapat mendefinisikan suatu objek atau prosedur
dalam hal kasus dasar (base case) dan langkah induksi (inductive step). Konsep ini
digunakan dalam berbagai bidang ilmu komputer, termasuk algoritma, struktur data, dan
bahasa pemrograman. Misalnya, dalam algoritma pencarian biner, setiap langkah
rekursif membagi rentang pencarian menjadi setengahnya, sehingga mengurangi jumlah
elemen yang perlu dipertimbangkan. Dalam pemrograman dinamis, rekursif sering
digunakan untuk mendefinisikan masalah dalam hal submasalah yang lebih kecil. Solusi
untuk setiap submasalah kemudian digabungkan untuk membangun solusi akhir.
Selain itu, teori dasar tentang rekursif juga melibatkan pemahaman tentang
tumpukan (stack) dalam komputer. Setiap kali fungsi dipanggil, informasi tentang
panggilan tersebut disimpan dalam tumpukan. Ketika fungsi selesai dieksekusi,
informasi tersebut dihapus dari tumpukan. Dalam rekursif, tumpukan tumbuh secara
dinamis dengan setiap panggilan rekursif baru, dan mengecil saat panggilan selesai
dieksekusi. Dengan pemahaman yang baik tentang kasus dasar, langkah- langkah
induksi, dan pengelolaan tumpukan, seseorang dapat mengembangkan solusi rekursif
yang efektif dan efisien untuk berbagai masalah dalam ilmu komputer.
A. Fungsi Rekursif

Fungsi Rekursif adalah fungsi yang memanggil dirinya sendiri selama proses
eksekusi. Ini memungkinkan penyelesaian masalah secara iteratif dengan membagi
masalah menjadi submasalah yang lebih kecil. Fungsi rekursif dapat menawarkan solusi
yang elegan dan mudah dimengerti untuk berbagai masalah, terutama ketika masalah
tersebut secara alami dapat dibagi menjadi submasalah yang lebih kecil. Namun, perlu
berhati-hati untuk memastikan bahwa rekursif tidak menyebabkan kelebihan beban
memori atau kinerja yang buruk.

Berikut adalah contoh sederhana implementasi rekursif dalam C++ untuk


menghitung factorial dari sebuah bilangan bulat positif
Gambar 2.1 Contoh Implementasi Rekursif

Dalam fungsi factorial, jika n adalah 0, maka hasilnya adalah 1 (kasus dasar). Jika
tidak, fungsi akan memanggil dirinya sendiri dengan argumen n-1 dan mengalikan
hasilnya dengan n. Proses ini berlanjut sampai mencapai kasus dasar, di mana hasil
akhir dikembalikan.
B. Factorial

Faktorial adalah operasi matematika yang dilambangkan dengan tanda seru (!)
dan didefinisikan sebagai hasil perkalian semua bilangan bulat positif dari 1 hingga
bilangan tersebut.
Berikut adalah contoh implementasi fungsi untuk menghitung faktorial dalam C++:

Gambar 2.2 Contoh Implementasi Faktorial

Dalam contoh ini, fungsi factorial adalah implementasi rekursif dariperhitungan


factorial. Jika argumen adalah 0, maka hasilnya adalah 1. Jika tidak, fungsi akan
memanggil dirinya sendiri dengan argumen \( n-1 \) dan mengalikan hasilnya dengan \( n
\). Proses ini berlanjut sampai mencapai kasus dasar, di mana hasil akhir dikembalikan.
C. Bilangan Fibonacci

Bilangan Fibonacci adalah urutan bilangan di mana setiap angka adalah jumlah
dari dua angka sebelumnya dalam urutan tersebut. Biasanya, urutan dimulai dengan 0 dan
1. Jadi, urutan Fibonacci dimulai dengan 0, 1, 1, 2, 3, 5, 8, 13, 21, dan seterusnya.

Contoh implementasi urutan Fibonacci dalam C++:

Gambar 2.3. Contoh Implementasi Bilangan Fibonacci

Dalam contoh ini, fungsi fibonacci adalah implementasi rekursif dari bilangan
Fibonacci. Jika argumen adalah 0 atau 1, fungsi mengembalikan angka itu sendiri. Jika
tidak, fungsi akan memanggil dirinya sendiri dengan argumen \( n-1 \) dan \( n-2 \), dan
mengembalikan jumlah dari kedua panggilan tersebut. Proses ini berlanjut sampai
mencapai kasus dasar, di mana hasil akhir dikembalikan.
Output dari program ini akan menampilkan urutan Fibonacci hingga 10 angka
pertama: 0 1 1 2 3 5 8 13 21 34.

2.2. JENIS-JENIS ALGORITMA REKURSIF

Ada beberapa jenis algoritma rekursif yang umum digunakan dalam


pemrograman. Berikut adalah beberapa di antaranya :
A. Algoritma Pembagian dan Penaklukkan (Divide and Conquer) :

Algoritma ini memecah masalah menjadi submasalah yang lebih kecil,


menyelesaikan masing-masing submasalah secara rekursif, dan kemudian
menggabungkan solusi submasalah untuk mendapatkan solusi akhir. Contoh dari
algoritma ini adalah quicksort dan mergesort untuk pengurutan, serta binary search untuk
pencarian. Implementasi algoritma pembagian dan penaklukan dapat terjadi dalam
berbagai konteks, mulai dari pengurutan dan pencarian hingga pencocokan string dan
komputasi paralel. Pendekatan ini sering digunakan karena dapat meningkatkan
efisiensi dan kinerja dalam menyelesaikan masalah kompleks dengan cara yang efisien.
B. Algoritma Backtracking**:

Algoritma backtracking mencoba solusi secara berulang untuk mencapai solusi


yang optimal. Jika solusi sementara tidak memenuhi kriteria tertentu, algoritma
melakukan mundur () dan mencoba solusi lain. Contoh dari algoritma ini adalah
penyelesaian masalah Sudoku atau penentuan rute terpendek dalam permasalahan
Travelling Salesman.
C. Algoritma Permutasi dan Kombinasi**:

Algoritma ini digunakan untuk menghasilkan semua kemungkinan permutasi atau


kombinasi dari sekelompok elemen. Ini sering digunakan dalam berbagai masalah,
seperti pencarian kombinasi kata dalam permainan kata, atau penyelesaian puzzle
permutasi. lgoritma permutasi dan kombinasi digunakan untuk menghasilkan semua
kemungkinan susunan atau kombinasi dari sejumlah elemen. Namun, keduanya memiliki
tujuan yang sedikit berbeda:
1. Permutasi :

Menghasilkan semua susunan mungkin dari sejumlah elemen. Dalam permutasi,


urutan elemen penting. Misalnya, jika terdapat 3 elemen (A, B, C), maka permutasi dari
ketiga elemen tersebut adalah ABC, ACB, BAC, BCA, CAB, dan CBA

2. Kombinasi :

Menghasilkan semua kombinasi yang mungkin dari sejumlah elemen tanpa


memperhatikan urutan. Misalnya, jika terdapat 3 elemen (A, B, C), maka kombinasi dari
ketiga elemen tersebut adalah ABC, ACB, BAC, dan CAB (kombinasi yang sama tidak
dihitung ulang).
D. Algoritma Pohon (Tree Algorithms) :

Algoritma ini beroperasi pada struktur data pohon, seperti pohon biner atau pohon
n-ary. Contoh dari algoritma ini termasuk traversal (penelusuran) pohon (preorder,
inorder, postorder), pencarian, dan operasi lainnya seperti penambahan atau
penghapusan node.
E. Algoritma Graf (Graph Algorithms) :

Algoritma ini digunakan untuk memproses struktur data graf, termasuk pencarian
jalur terpendek, penelusuran graf (misalnya, depth-first search dan breadth-first search),
serta algoritma lainnya seperti algoritma Dijkstra atau algoritma Bellman-Ford untuk
mencari jalur terpendek dalam graf berbobot.
BAB III

PERMASALAHAN

3.1 PERMASALAHAN

A Run dan perbaiki bagain yang eror pada program dibawah;

B. Buatlah program C++ mencari nilai kombinasi dan permutasi


BAB IV

IMPLEMENTASI

4.1. IMPLEMENTASI

A. Run dan Perbaikan Program Yang Eror

Gambar 4.1 Program yang Belum Diperbaiki Atau Eror

Terdapat beberapa masalah pada kode tersebut. Berikut adalah perbaikannya:

1. Pada fungsi faktorial, kondisi if (n >= 1) seharusnya menjadi if (n <= 1)


karena kita ingin memproses faktorial jika n kurang dari atau sama dengan 1.
2. Pada rekursif di dalam fungsi faktorial, perhitungan seharusnya menggunakan
faktorial(n - 1) bukan faktorial(n - 0).
3. Di dalam fungsi main, nilai kembali dari main seharusnya adalah 0, bukan 1

Gambar 4.2 Ouput dari program yang belum Diperbaiki


Terlihat pada gambar ouput program yang belum diperbaiki diatas meskipun kita
sudah memasukkan angka, program nya tidak mengeluarkan hasil faktorial dari angka
yang kita masukkan.
Berikut adalah program yang sudah diperbaiki:

Gambar 4.3 Program Yang Sudah Diperbaiki

Pada gambar diatas merupakan program yang sudah diperbaiki dan sudah tidak
eror.

Gambar 4.4 Output Dari Program Yang Sudah Diperbaiki

Terlihat pada gambar ouput program yang sudah diperbaiki diatas ketika kita
memasukkan angka maka program akan segera mengeluarkan angka faktorial dari angka
yang kita masukkan.
B. Program Rekursif Factorial C++

Gambar 4.5 Progam Rekursif Permutasi dan Kombinasi


Kode ini menghitung faktorial dari sebuah angka yang dimasukkan oleh pengguna
menggunakan fungsi rekursif. Pengguna diminta memasukkan sebuah angka, kemudian
program akan menghitung faktorial dari angka tersebut dan menampilkan hasilnya.

Gambar 4.6 Progam Rekursif Permutasi dan Kombinasi


Kode ini menghitung faktorial dari sebuah angka yang dimasukkan oleh pengguna
menggunakan fungsi rekursif. Pengguna diminta memasukkan sebuah angka, kemudian
program akan menghitung faktorial dari angka tersebut dan menampilkan hasilnya.
BAB V
PENUTUP

A. KESIMPULAN

Secara keseluruhan, rekursif adalah teknik pemrograman yang kuat di mana suatu
fungsi dapat memanggil dirinya sendiri untuk menyelesaikan masalah. Dengan
pemahaman yang baik tentang konsep dan praktik terbaik dalam penggunaan rekursif,
pengembang dapat memanfaatkannya untuk menulis kode yang lebih bersih, elegan, dan
efisien.

B. SARAN

Pastikan mahasiswa untuk memahami konsep dasar rekursif, termasuk kasus dasar,
langkah rekursif, dan cara kerja tumpukan pemanggilan Sebelum menggunakan
rekursif, pertimbangkan kinerja dan penggunaan memori. Kadang- kadang, pendekatan
iteratif dapat lebih efisien daripada rekursif.
DAFTAR PUSTAKA

Andika Pratama, ‘Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan


Keluar Di Labirin’, 16, 2007
Lutfina, Erba, Nur Inayati, and Galuh Wilujeng Saraswati, ‘Analisis Perbandingan
Kinerja Metode Rekursif Dan Metode Iteratif Dalam Algoritma Linear Search’,
Komputika : Jurnal Sistem Komputer, 11.2 (2022), pp. 143–50,
doi:10.34010/komputika.v11i2.5493
Purwandari, Endina Putri, ‘Peningkatan Kualitas Pembelajaran Pengolahan Citra Digital
Pada Program Studi Teknik Informatika Menggunakan Model Project Based
Learning’, Jurnal Rekursif, 2.1 (2014), pp. 53–62
Renaningtias, Nurul, and Dyah Apriliani, ‘Penerapan Metode Prototype Pada
Pengembangan Sistem Informasi Tugas Akhir Mahasiswa’, Rekursif: Jurnal
Informatika, 9.1 (2021), doi:10.33369/rekursif.v9i1.15772

Anda mungkin juga menyukai