Halo teman-teman!
Kali ini kita akan membahas konsep menarik dalam fungsi, yaitu rekursi. Rekursi sering membuat bingung pemula, tapi kalau dipahami dengan baik, rekursi bisa jadi alat yang sangat berguna.
Apa itu Rekursi
Rekursi adalah teknik pemrograman di mana sebuah fungsi memanggil dirinya sendiri.
Biasanya rekursi digunakan untuk menyelesaikan masalah yang bisa dipecah menjadi masalah yang lebih kecil dan serupa.
Contohnya:
-
Menghitung faktorial
-
Menghitung bilangan Fibonacci
-
Traversal struktur data (tree, graph)
-
Pemecahan masalah matematika yang berulang
Struktur Dasar Rekursi
Sebuah fungsi rekursif memiliki dua bagian penting:
-
Base case → kondisi berhenti, agar fungsi tidak memanggil dirinya tanpa henti.
-
Recursive call → bagian di mana fungsi memanggil dirinya sendiri dengan data yang lebih kecil.
Bentuk umumnya:
Contoh 1: Fungsi Faktorial
Faktorial dari sebuah bilangan n didefinisikan sebagai:
-
n! = n × (n-1) × (n-2) × ... × 1
-
0! = 1 (base case)
Mari kita coba implementasikan dengan rekursi:
Output:
Contoh 2: Deret Fibonacci
Deret Fibonacci adalah deret angka di mana setiap angka merupakan hasil penjumlahan dua angka sebelumnya.
Rumus:
-
F(0) = 0
-
F(1) = 1
-
F(n) = F(n-1) + F(n-2)
Implementasi dengan rekursi:
Output:
Rekursi vs Iterasi
Sebenarnya, banyak masalah rekursif bisa diselesaikan dengan perulangan (iterasi).
Contoh faktorial:
Versi iterasi:
Versi rekursi lebih ringkas, tapi iterasi sering lebih efisien dalam penggunaan memori dan kecepatan.
Risiko Rekursi
Walaupun rekursi itu elegan, ada beberapa hal yang perlu diperhatikan:
-
Stack overflow
Jika base case tidak jelas atau data terlalu besar, fungsi bisa memanggil dirinya terlalu dalam dan menyebabkan error stack overflow. -
Kurang efisien
Beberapa masalah (seperti Fibonacci) sangat lambat jika hanya menggunakan rekursi sederhana, karena banyak perhitungan berulang. -
Sulit dipahami pemula
Rekursi butuh logika yang lebih abstrak, sehingga lebih sulit dipahami di awal.
Kesimpulan
-
Rekursi adalah fungsi yang memanggil dirinya sendiri.
-
Harus punya base case agar tidak berjalan tanpa henti.
-
Cocok digunakan untuk masalah yang berulang atau berbentuk pecahan dari masalah yang sama.
-
Bisa diganti dengan iterasi, tetapi rekursi sering membuat kode lebih sederhana dan elegan.
-
Hati-hati dengan performa dan risiko stack overflow.

0 Komentar