๐งญ 1. Pengantar Konsep Rekursi dan DP
6
๐ Definisi
- Rekursi (Recursion) adalah teknik pemrograman di mana sebuah fungsi memanggil dirinya sendiri untuk menyelesaikan masalah.
- Dynamic Programming (DP) adalah teknik optimasi yang menyelesaikan masalah dengan cara menyimpan hasil submasalah agar tidak dihitung ulang.
๐ง Narasi Konseptual
Bayangkan kamu ingin menghitung tangga:
- Rekursi โ kamu memecah tangga menjadi langkah lebih kecil sampai dasar
- DP โ kamu mengingat langkah yang sudah dihitung agar tidak mengulang
๐ 2. Rekursi (Recursion)
๐ 2.1 Konsep Dasar Rekursi
6
๐ Definisi
Rekursi adalah proses di mana fungsi:
- Memanggil dirinya sendiri
- Memiliki base case (kasus dasar) untuk berhenti
๐ง Narasi
Rekursi seperti:
- Cermin di depan cermin โ pantulan tak berujung
- Tapi ada batas agar tidak infinite loop (base case)
โ๏ธ 2.2 Struktur Rekursi
๐ Komponen Rekursi
| Komponen | Penjelasan |
|---|---|
| Base Case | Kondisi berhenti |
| Recursive Case | Fungsi memanggil dirinya sendiri |
๐ป Contoh Sederhana
int faktorial(int n){
if(n == 0) return 1; // base case
return n * faktorial(n-1);
}
๐ 2.3 Contoh Rekursi: Faktorial
๐ง Narasi
Faktorial 5:
5! = 5 ร 4 ร 3 ร 2 ร 1
๐ 2.4 Tree Rekursi (Contoh Fibonacci)
7
๐ Konsep
Fibonacci:
F(n) = F(n-1) + F(n-2)
๐ง Narasi
Rekursi Fibonacci:
- Banyak submasalah dihitung ulang
- Tidak efisien untuk n besar
โ ๏ธ 2.5 Kelemahan Rekursi
๐ Tabel
| Masalah | Penjelasan |
|---|---|
| Overlapping computation | Perhitungan berulang |
| Stack overflow | Rekursi terlalu dalam |
| Lambat | Eksponensial |
โก 3. Dynamic Programming (DP)
๐ 3.1 Konsep Dynamic Programming
8
๐ Definisi
Dynamic Programming adalah teknik untuk menyelesaikan masalah dengan:
- Memecah masalah menjadi submasalah
- Menyimpan hasil (memoization/tabulation)
- Menghindari perhitungan ulang
๐ง Narasi
DP seperti:
- Menulis hasil di buku catatan
- Tidak menghitung ulang masalah yang sama
๐ 3.2 Prinsip DP
๐ Dua Prinsip Utama
| Prinsip | Penjelasan |
|---|---|
| Overlapping Subproblem | Submasalah berulang |
| Optimal Substructure | Solusi optimal dari subsolusi |
๐งฎ 3.3 Metode DP
๐น A. Memoization (Top-Down)
7
๐ Konsep
- Rekursi + penyimpanan hasil
- Menghindari perhitungan ulang
๐น B. Tabulation (Bottom-Up)
6
๐ Konsep
- Mengisi tabel dari bawah ke atas
- Tidak menggunakan rekursi
๐ 3.4 Perbandingan Rekursi vs DP
๐ Tabel
| Aspek | Rekursi | Dynamic Programming |
|---|---|---|
| Efisiensi | Rendah | Tinggi |
| Perhitungan ulang | Ya | Tidak |
| Memori | Call stack | Array/table |
| Kecepatan | Lambat | Cepat |
โก 3.5 Contoh DP: Fibonacci
๐ Rekursi (Tidak Efisien)
int fib(int n){
if(n <= 1) return n;
return fib(n-1) + fib(n-2);
}
โก DP (Efisien)
int fib(int n){
int dp[n+1];
dp[0] = 0;
dp[1] = 1; for(int i=2; i<=n; i++){
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
}
๐ง 3.6 Narasi Perbandingan
- Rekursi โ seperti menghitung ulang dari awal setiap kali
- DP โ seperti menyimpan hasil agar tidak menghitung ulang
๐ 4. Analisis Kompleksitas
๐ Tabel
| Metode | Fibonacci Complexity |
|---|---|
| Rekursi | O(2โฟ) |
| DP | O(n) |
๐งช 5. Studi Kasus Dunia Nyata
๐ Contoh Penggunaan DP
| Bidang | Contoh |
|---|---|
| AI | Path optimization |
| Game | Shortest path (AI movement) |
| Finance | Knapsack problem |
| Text processing | Edit distance |
๐ฎ 6. Contoh Masalah DP: Knapsack
6
๐ Konsep
Memilih barang dengan:
- Berat terbatas
- Nilai maksimal
๐ 7. Ringkasan Materi
- Rekursi = fungsi memanggil dirinya sendiri
- DP = optimasi rekursi dengan menyimpan hasil
- DP memiliki 2 pendekatan: memoization & tabulation
- DP lebih efisien dari rekursi biasa
- Digunakan dalam AI, game, dan optimasi sistem
๐ 8. Latihan / Diskusi
โ๏ธ Soal Teori
- Apa itu rekursi?
- Apa kelemahan rekursi?
- Jelaskan DP dan manfaatnya
๐ป Soal Praktikum
- Implementasi faktorial rekursif
- Fibonacci dengan DP
- Bandingkan waktu eksekusi
๐ฏ Penutup
Rekursi dan Dynamic Programming adalah fondasi penting dalam algoritma lanjutan, karena:
- Digunakan di AI
- Digunakan di optimasi sistem
- Digunakan di competitive programming