Apa itu Recursive Function?

By Rizky Kurniawan - January 4, 2023 ~4 mins read

Halo semuanya, Selamat datang kembali di Blog Ruang Developer. Gimana kabarnya hari ini? Masih semangat kan? 😀😀😀 Pada kesempatan ini kita akan belajar tentang recursive function. Apa itu recursive function? Apakah kamu pernah menggunakannya? Yuk langsung saja kita mulai!

Recursive Function

Recursive function adalah sebuah fungsi yang memanggil dirinya sendiri. Fungsi ini biasanya digunakan untuk menyelesaikan masalah yang dapat dipecah menjadi submasalah yang lebih kecil yang sama dengan masalah utama. Sebagai contoh, Kita dapat menggunakan fungsi rekursif untuk mencari faktorial dari sebuah bilangan. Dalam kasus ini, faktorial dari suatu bilangan dapat didefinisikan sebagai bilangan tersebut dikalikan dengan faktorial dari bilangan sebelumnya.

Untuk menggunakan fungsi rekursif, Kita harus membuat basis kasus (juga dikenal sebagai kondisi akhir), yang merupakan kondisi di mana fungsi tidak lagi memanggil dirinya. Hal ini sangat penting, karena jika tidak ada basis kasus, fungsi akan terus memanggil dirinya secara terus-menerus, yang disebut rekursi tanpa akhir dan dapat menyebabkan crash pada program.

Contoh Penggunaan

Sebagai contoh, di bawah ini adalah implementasi fungsi rekursif untuk mencari faktorial dari sebuah bilangan di Python:

def factorial(n):
  if n == 1:
    return 1
  else:
    return n * factorial(n-1)

print(factorial(5))  # Output: 120

Dari kode di atas, kita membuat basis kasus dengan mengecek apakah n sama dengan 1. Jika ya, maka kita langsung mengembalikan nilai 1. Jika tidak, kita kembalikan nilai n dikalikan dengan faktorial dari n - 1. Fungsi akan terus memanggil dirinya sendiri dengan mengurangi nilai n sampai n sama dengan 1, di mana basis kasus terpenuhi dan fungsi akan berhenti memanggil dirinya.

Selain itu, recursive function juga dapat digunakan untuk menyelesaikan masalah yang lain, seperti traversal pada tree, pencarian biner, dan masalah lain yang dapat dipecah menjadi subproblems yang lebih kecil.

Recursive Function vs Looping

Recursive function dan looping sama-sama dapat digunakan untuk menyelesaikan masalah yang sama, namun ada beberapa perbedaan dalam hal efisiensi.

Secara umum, looping lebih efisien daripada recursive function dalam hal waktu eksekusi. Hal ini karena looping tidak membutuhkan overhead yang terlalu besar untuk menyimpan informasi dari setiap pemanggilan fungsi seperti yang dibutuhkan oleh recursive function. Selain itu, looping juga membutuhkan memori yang lebih sedikit daripada recursive function, karena tidak perlu menyimpan informasi dari setiap pemanggilan fungsi.

Namun, ada juga beberapa kasus di mana recursive function lebih efisien daripada looping. Sebagai contoh, jika masalah yang akan diselesaikan memiliki struktur yang cocok dengan pendekatan rekursif, maka recursive function dapat lebih mudah dibaca dan ditulis daripada looping.

Jadi, tergantung pada masalah yang akan diselesaikan dan preferensi pribadi, salah satu dari kedua pendekatan tersebut dapat lebih efisien daripada yang lainnya. Selalu penting untuk mempertimbangkan kelebihan dan kekurangan masing-masing pendekatan dan memilih yang paling sesuai untuk masalah yang akan diselesaikan.

Itulah sedikit penjelasan tentang recursive function. Saya harap teman-teman sudah paham dengan apa yang telah saya jelaskan di atas. Jika ada yang kurang paham, jangan ragu untuk bertanya di kolom komentar ya!

Kompleksitas Waktu pada Recursive Function

Kompleksitas waktu adalah ukuran yang mengukur berapa lama sebuah algoritma atau program dijalankan untuk menyelesaikan suatu masalah. Kompleksitas waktu dapat ditentukan dengan melihat jumlah operasi yang dilakukan oleh program tersebut, terutama operasi yang dilakukan dengan frekuensi yang bergantung pada ukuran masalah.

Untuk menghitung kompleksitas waktu suatu recursive function, pertama-tama perlu ditentukan berapa banyak operasi yang dilakukan pada setiap pemanggilan fungsi. Kemudian, perlu ditentukan berapa banyak kali fungsi tersebut dipanggil untuk menyelesaikan masalah. Sebagai contoh, di bawah ini adalah implementasi fungsi rekursif untuk mencari nilai maksimum dalam sebuah array:

def find_max(arr):
  if len(arr) == 1:  # Basis kasus
    return arr[0]
  else:
    return max(arr[0], find_max(arr[1:]))

Dari kode di atas, setiap pemanggilan fungsi hanya melakukan 2 operasi, yaitu pemanggilan fungsi max() dan pemanggilan fungsi find_max() lagi. Dengan demikian, kompleksitas waktu dari fungsi ini adalah O(2^n), di mana n adalah panjang dari array.

Perlu diingat bahwa kompleksitas waktu ini hanya merupakan estimasi umum, dan dapat berbeda tergantung pada implementasi yang digunakan. Jadi, sebaiknya selalu melakukan pengujian terhadap program untuk mengetahui performa sebenarnya dari suatu algoritma atau program.

Kapan Harus Menggunakan Recursive Function?

Seperti yang sudah dijelaskan, recursive function biasanya digunakan untuk menyelesaikan masalah yang dapat dipecah menjadi submasalah yang lebih kecil yang sama dengan masalah utama. Sebagai contoh, Kita dapat menggunakan recursive function untuk mencari faktorial dari sebuah bilangan, mencari nilai maksimum dalam sebuah array, atau melakukan traversal pada sebuah tree.

Selain itu, recursive function juga dapat digunakan untuk menyelesaikan masalah yang memiliki struktur yang sesuai dengan pendekatan rekursif, seperti pencarian biner, perhitungan fibonacci, dan masalah lain yang membutuhkan pendekatan bottom-up.

Namun, perlu diingat bahwa recursive function tidak selalu merupakan pilihan yang terbaik untuk setiap masalah. Sebagai contoh, jika masalah yang akan diselesaikan membutuhkan iterasi yang banyak dan tidak memiliki struktur yang sesuai dengan pendekatan rekursif, maka looping mungkin lebih sesuai.

Jadi, sebaiknya pertimbangkan apakah masalah yang akan diselesaikan cocok dengan pendekatan rekursif atau tidak sebelum memutuskan untuk menggunakan recursive function. Selalu penting untuk mempertimbangkan kelebihan dan kekurangan dari setiap pendekatan dan memilih yang paling sesuai untuk masalah yang akan diselesaikan.

Bagikan:

Ingin Berdiskusi?

Yuk bergabung di Grup Telegram Ruang Developer atau mulai diskusi melalui GitHub. See You!

Dapatkan contoh source code project backend, frontend, atau fullstack untuk kamu amati, tiru, dan modifikasi sesuka hati. Klik untuk melihat detail!
comments powered by Disqus

Berlangganan Gratis

Kamu akan menerima email update dari Ruang Developer

Beri Dukungan

Beri dukungan, dapatkan full source code project web untuk bahan referensi, tiru, dan modifikasi.
Lightbox