Rekursi dan Dynamic Programming (DP)


๐Ÿงญ 1. Pengantar Konsep Rekursi dan DP

https://images.openai.com/static-rsc-4/PRrIADLytohrWuwj_kUX0S8IPwAoX3D0R2bw6ab1tPdKie9cavUla2PD0PXVSL9G5u_7sOCaTWqI2nt2PkaQCw6e5rwdyTDFL0GhdoYDHQB6MZffDruyPXid8vpTSai5CfsgjM8IABSOUkr9LoW9CbDrcWwcTk7vxm5NpyvybSy_crLmd0lMpwaFLUcMM6ix?purpose=fullsize
https://images.openai.com/static-rsc-4/PMKgg_loQV0x9023cTE9F99_zu2H-ChxFFxtArfU6aGyA0XzB2GalkkJstII6BIVwjzLamq0bYHi6GRehLttfrVzLIQLE1hSxfbcdrl4ZSxRRlodVS7GcZuPijujEIPMHgwA4cbdc8TePQGeiJGJ_AVfgYfW4biOkmcg-CEkbKyjYKVPO3WEQGxRPvATzyxs?purpose=fullsize
https://images.openai.com/static-rsc-4/gVxhJtPc1eYSeCIA8hhO_Z-DhVEXV7KozSPmfPY07iob4jkPdTyr17O45Mte7Z4_Zg-omm_CJ36yYl4U3_hsEs4GwTiOQuIraXMmiwInJi23-ZAIpgQ_DB2EjHutahBfjLcf2IwaaoUfyUQudxx4W9cbZHkcx33UKLVP9eJ-sTCJU7vKgDWgvtd6PdUmiThX?purpose=fullsize

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

https://images.openai.com/static-rsc-4/9vXXumvEVMhbTfnSwG7CYTGUxdRDnRzPfDpas-JzTnyouaPLy9IEq2p5UX9ZZ8cVmELNDfuZJaWtv9twQXNsfv-VpHRGxXTkZt7LXYahHVblHYSc3i4TEonmVIAliyORD_2qqoiWQkxCMITbZr7iR-hbAzvd5L6Kc5V9socUMAo5YLjuzm1zJKwIbpS-n89R?purpose=fullsize
https://images.openai.com/static-rsc-4/TWluG0fHghoJiZ8EgIodzuP6XxFacbEPOKdz9iq6SinCk2LyhRxUf9G81byWU7S2Nq3Qj9kWsyzybbAPZyC2q-sqDOZURofgY4uSC1kXk7883vSob9sDzqcpyV08Id23fbFIjD8fd3bEmj_hHjQkVcFwRL7FwKX0t5b4_WfhqvfpKiqxsSQwsgyY9CnTEvku?purpose=fullsize
https://images.openai.com/static-rsc-4/u_dHlXCS2HpH0avmbiKn7ynfazMQvZtvIycWnI8J5NGQjP8BXG_NHp0_yirV5tSLiBvavzdO7iUTPBFE50CxT0efDlXRdm4pIgBxVUoAVXBcS7wTpnkA8gV3sdDWcjzKzupDZ5-bG08e8l7d48K0Dr-TECGHU-B7xzdD2t1eriHXxwNOm4fZknvY7byKmLUS?purpose=fullsize

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

KomponenPenjelasan
Base CaseKondisi berhenti
Recursive CaseFungsi 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)

https://images.openai.com/static-rsc-4/PMKgg_loQV0x9023cTE9F99_zu2H-ChxFFxtArfU6aGyA0XzB2GalkkJstII6BIVwjzLamq0bYHi6GRehLttfrVzLIQLE1hSxfbcdrl4ZSxRRlodVS7GcZuPijujEIPMHgwA4cbdc8TePQGeiJGJ_AVfgYfW4biOkmcg-CEkbKyjYKVPO3WEQGxRPvATzyxs?purpose=fullsize
https://images.openai.com/static-rsc-4/1ctHoa4lzsq5Q-u8u2H2tUJPSH-Mh68j8t3-JSEJg7kLJVuTbXyBlbeTfdDN4dM5Q_6rR26FKnq8a_BoNcH_2yW6woek9CVlm8TOhJjrXK1xUKjTMl9FAq-TLguBmtaVE7HCsIHoQYV60FciBKppjuBW7zH6IVOC1C3Ln3wzV985JQVlUMSXKFTySoJOxsBU?purpose=fullsize
https://images.openai.com/static-rsc-4/uDdnfDfnZlKC8_2xSQlW3LHAtFgqb2JNKGmnktBSenrOXQ-usea7Mm9n7ATuT4x3_Xdv6McQG0GhUdlMWIe35PGz0J-HYJbBYcRV2JuFKAB0sYcaK_oyDuY-4Jrd96Hbf9sl44oJ9bHbsFR9Zk07OkuHYw667qOvIurFlOihiMFU21BMAjc09qH_87x6g6sa?purpose=fullsize

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

MasalahPenjelasan
Overlapping computationPerhitungan berulang
Stack overflowRekursi terlalu dalam
LambatEksponensial

โšก 3. Dynamic Programming (DP)


๐Ÿ“Œ 3.1 Konsep Dynamic Programming

https://images.openai.com/static-rsc-4/zHIWD40LQ7S-iwOmfCEXCTYuWaJRTyd0IT7MdNay3wx7rZRVSJaIvYUEXIij66XCGTl1Hkmn2DIgOXY3v2nsth8mDCxcWsDfY39zQJDbeKgtQGnhGvGv3ggXEi4nJkyEFZQJBTCIkV0qZ1Dv9IEndbIuWthDmh3pTc2COEYCGCJyCEAEJV5mjJhoDHg2ZEaZ?purpose=fullsize
https://images.openai.com/static-rsc-4/pgYIYM67rUl-Hg6MJwTGN3bA5j8UJy0wjU7I_0zTvpTX390YMGzNtrRPlb8Ss8Wj0hhCzudJoSXUVt208XbGABAy1dl9sDbCHba8HP66UbVNUae58zhEfXft0LFVsHnpTVQuT2zJOFBDW5cLFEvrIsJMLDamHM1Dyi3-kqo88ItwYb72SIaG_4VNHQhNWN0b?purpose=fullsize
https://images.openai.com/static-rsc-4/ac6TOJtbM6itayhurbegXuuLBJGahBj30UuImn8XON9mSbO7oa3dLOAsvpKJybek5ZqVEEai7eEkC15W8sN32NydS0FN1Zx3enqJKrxBjwrawIgqyOYj7FpwT9WguxNo1wKO_GXZUCIA66mouzeCR1QiemmU-qcRpKUukEGlVhSoMr3BFut9o3kcL2_Zu789?purpose=fullsize

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

PrinsipPenjelasan
Overlapping SubproblemSubmasalah berulang
Optimal SubstructureSolusi optimal dari subsolusi

๐Ÿงฎ 3.3 Metode DP


๐Ÿ”น A. Memoization (Top-Down)

https://images.openai.com/static-rsc-4/kTUPFalflK5POHWO1Fs03J76n-fCsXidJIYbOHgAI_3qDa7YveL6QYvNzxgTnzjOqFSn14YcuYtBNEBU5bzF1uIckx7pm2NrRQMjOtCsg254ju5KuNVBKpNCqvzS6QpcGTbPWi0foQVOEBff6cTCQl2vafiHO1brw7XGggdAY_HV--1EHC1zlMoW6cGpyemQ?purpose=fullsize
https://images.openai.com/static-rsc-4/pgYIYM67rUl-Hg6MJwTGN3bA5j8UJy0wjU7I_0zTvpTX390YMGzNtrRPlb8Ss8Wj0hhCzudJoSXUVt208XbGABAy1dl9sDbCHba8HP66UbVNUae58zhEfXft0LFVsHnpTVQuT2zJOFBDW5cLFEvrIsJMLDamHM1Dyi3-kqo88ItwYb72SIaG_4VNHQhNWN0b?purpose=fullsize
https://images.openai.com/static-rsc-4/YdL2EOrwsLUubwg2t6NhUlvNxhlAN45q6MUCZ8yOwsTZD86aF-i30cpIhIqxoM38spDjumvYwNVuWQSWaBdKbFFM8he1eSY1Agiy7h5xoxS-vD2VlwVU5suTg6pphW_poAouHGU4PM6klCIU-my5gHmcVunLSdT_k1T1L1PuCwI9siHm610POx4OXDZ8g6nf?purpose=fullsize

7

๐Ÿ“– Konsep

  • Rekursi + penyimpanan hasil
  • Menghindari perhitungan ulang

๐Ÿ”น B. Tabulation (Bottom-Up)

https://images.openai.com/static-rsc-4/1RPEOrRsEinJSIFrQ7ZLi381j-ejze9Dxwg_KeFVfpyahW0KjUUmZO9QIiqmO1BtDHGBEu23H4dwxcJ6ImVj6Lu7cpLCXU1SRYtk7cGLsuVM4EPWAhWqrfP241ftaUqHtky8bj6wUyBdKuIvStz4FtgNXVjNTUoDRoUffDZ-zUrSS9ZVL43blInRJWnCDQ1m?purpose=fullsize
https://images.openai.com/static-rsc-4/NQ2OJDpGhyen6tiZ5t2Zq3nVxjfNL_gXHpbMa56gfMD4lvnuCZnZcveHnHFstZI76xxIn6IuzzvGdsr3rmxCRnD9XicSburgPyooAaRLhC0BAoa6325j0DazYpb4JKDbbxD22rKUyHXb3uTuyp_xnHPz6EiR-xWZJii70RWd2X51zzk-RD7ferbyrLZRbxLv?purpose=fullsize
https://images.openai.com/static-rsc-4/pgYIYM67rUl-Hg6MJwTGN3bA5j8UJy0wjU7I_0zTvpTX390YMGzNtrRPlb8Ss8Wj0hhCzudJoSXUVt208XbGABAy1dl9sDbCHba8HP66UbVNUae58zhEfXft0LFVsHnpTVQuT2zJOFBDW5cLFEvrIsJMLDamHM1Dyi3-kqo88ItwYb72SIaG_4VNHQhNWN0b?purpose=fullsize

6

๐Ÿ“– Konsep

  • Mengisi tabel dari bawah ke atas
  • Tidak menggunakan rekursi

๐Ÿ“Š 3.4 Perbandingan Rekursi vs DP

๐Ÿ“Š Tabel

AspekRekursiDynamic Programming
EfisiensiRendahTinggi
Perhitungan ulangYaTidak
MemoriCall stackArray/table
KecepatanLambatCepat

โšก 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

MetodeFibonacci Complexity
RekursiO(2โฟ)
DPO(n)

๐Ÿงช 5. Studi Kasus Dunia Nyata

๐Ÿ“Œ Contoh Penggunaan DP

BidangContoh
AIPath optimization
GameShortest path (AI movement)
FinanceKnapsack problem
Text processingEdit distance

๐ŸŽฎ 6. Contoh Masalah DP: Knapsack

https://images.openai.com/static-rsc-4/ZVZU-XpCQwHqo6-R93Zo30Kia8N_ZaEq9OLBfo9L6CD_UyWS-1MtaKzsz6IxaJLhcYwJxMx6KVu7B4yvkSlpPv895LOY0OO6SjHTbbb-ZJdksxfYNTMuFNYk5C8h4cbbKiiTuHzt4Ygm1m5U7FtBXjVsthJ5YWtw3ul_N3zUHksqAywc36U5vG7UcY6TE4Aa?purpose=fullsize
https://images.openai.com/static-rsc-4/rjZA4HcL1GNyI1WQDTQIua4Q6xf4FHHP4d7t4wX5ZgrWNOVayUjxvPiG77XG1wjMbg88YWLpzsXVEVBNMBJiuXcnqsQQqIacqj35PDLZUb9L8cC3xZCIABtAGUaJdCcyZ4EMzxa98tzz9Y6rnGXfR-kVOLgTeU766_srBHy--vxzJUTy6S8vooeyWTh_6aBF?purpose=fullsize
https://images.openai.com/static-rsc-4/Al1qIjout-iS0kFTVG6RcZRhwdx-8sGPApl6o3hf0iBJuri5ySCdLRO-PW6ErE1lAkmiAyBqF1ocNPIbWS8g7XaREbPiT9mc7nmPrBUs2ZpXYfs5bvaPQHL_-HYpnI63T6on-jHuuTtXHg0RKk-j1h4-8bogupB70IoHFQ-lfw_dDBq5_AMj8bpcCdTqQqGi?purpose=fullsize

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

  1. Apa itu rekursi?
  2. Apa kelemahan rekursi?
  3. Jelaskan DP dan manfaatnya

๐Ÿ’ป Soal Praktikum

  1. Implementasi faktorial rekursif
  2. Fibonacci dengan DP
  3. 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