Dalam dunia pemrograman, terutama Python, konsep rekursi adalah salah satu teknik yang kuat namun seringkali menantang untuk dipahami pada awalnya. Rekursi terjadi ketika sebuah fungsi memanggil dirinya sendiri secara langsung atau tidak langsung untuk menyelesaikan suatu masalah.
Pada dasarnya, pemrograman rekursif memecah masalah kompleks menjadi sub-masalah yang lebih kecil dan identik, hingga mencapai kondisi dasar (base case) yang dapat dipecahkan tanpa rekursi lebih lanjut.
Bayangkan Anda sedang melihat dua cermin yang saling berhadapan. Anda akan melihat bayangan yang tak terbatas di dalamnya. Rekursi bekerja dengan prinsip serupa: sebuah panggilan fungsi menghasilkan panggilan fungsi lain, hingga suatu titik tertentu tercapai.
Agar sebuah fungsi rekursif berjalan dengan benar dan tidak menyebabkan stack overflow (karena pemanggilan yang tak terbatas), dua elemen kunci harus ada:
base case, fungsi akan terus memanggil dirinya sendiri selamanya.base case.Faktorial dari bilangan bulat positif $n$ (ditulis $n!$) adalah hasil perkalian semua bilangan bulat positif kurang dari atau sama dengan $n$. Misalnya, $5! = 5 \times 4 \times 3 \times 2 \times 1 = 120$.
Ini adalah contoh sempurna untuk rekursi karena $n! = n \times (n-1)!$.
def faktorial(n):
# Base Case: Jika n adalah 0 atau 1, hasilnya adalah 1
if n <= 1:
return 1
# Recursive Step: n dikalikan dengan faktorial dari (n-1)
else:
return n * faktorial(n - 1)
print(faktorial(5)) # Output: 120
Ketika kita memanggil faktorial(4), Python membangun "tumpukan" panggilan (call stack):
faktorial(4) membutuhkan 4 * faktorial(3)faktorial(3) membutuhkan 3 * faktorial(2)faktorial(2) membutuhkan 2 * faktorial(1)faktorial(1) mencapai Base Case dan mengembalikan 1.Setelah faktorial(1) selesai, hasilnya dirambatkan kembali ke atas tumpukan, memungkinkan kalkulasi dilakukan secara berurutan.
Visualisasi proses pemanggilan rekursif menuju base case.
Meskipun elegan, rekursi memiliki batasan dalam Python:
sys.setrecursionlimit(), tetapi ini tidak disarankan untuk masalah yang sangat besar.Dalam banyak kasus, terutama untuk perhitungan linier seperti faktorial, solusi iteratif (menggunakan for atau while loop) lebih disarankan karena lebih efisien dalam penggunaan memori dan lebih aman dari batasan kedalaman.
Rekursif python adalah alat fundamental yang mengajarkan cara berpikir tentang pemecahan masalah secara bertahap, memecah masalah besar menjadi versi yang lebih kecil dari masalah itu sendiri. Menguasai konsep base case dan recursive step adalah kunci utama untuk berhasil mengimplementasikan fungsi rekursif yang efisien dan benar di Python.