Konsep Fungsi Rekursif Python: Tutorial Python untuk Pemula
Diterbitkan: 2020-03-18Dalam dunia ilmu komputer, rekursi mengacu pada teknik mendefinisikan sesuatu dalam istilahnya sendiri. Dengan kata lain, fungsi rekursif memanggil dirinya sendiri untuk diproses. Pada artikel ini, kita akan memahami konsep fungsi rekursif dalam Python , bahasa pemrograman yang banyak digunakan di abad ke-21.
Daftar isi
Apa itu Rekursi Python ?
Dalam Python, sekelompok pernyataan terkait yang melakukan tugas tertentu disebut sebagai 'fungsi'. Jadi, fungsi memecah program Anda menjadi potongan-potongan yang lebih kecil. Dan sudah menjadi rahasia umum bahwa suatu fungsi dapat memanggil fungsi lain dengan Python.
Tetapi beberapa fungsi lain dapat memanggil dirinya sendiri. Ini dikenal sebagai fungsi rekursif. Pertimbangkan dua cermin paralel yang ditempatkan saling berhadapan. Sekarang, objek apa pun yang disimpan di antara cermin akan dipantulkan secara rekursif.
Mari kita masuk ke detail tentang fungsi rekursif untuk memahami kerjanya dengan jelas.
Fungsi Rekursif
Kita tahu bahwa fungsi rekursif dalam Python memanggil dirinya sendiri seperti yang didefinisikan melalui ekspresi referensi diri, yaitu, dalam istilah itu sendiri. Itu terus mengulangi perilakunya sampai kondisi tertentu terpenuhi untuk mengembalikan nilai atau hasil. Sekarang mari kita lihat contoh untuk mempelajari cara kerjanya.
Baca juga: Pertanyaan & Jawaban Wawancara Python
Misalkan Anda ingin mencari faktorial dari suatu bilangan bulat. Faktorial tidak lain adalah produk dari semua angka, mulai dari 1 hingga bilangan bulat itu. Misalnya, faktorial dari 5 (ditulis sebagai 5!) akan menjadi 1*2*3*4*5*6, yaitu 720. Kami memiliki fungsi rekursif calc_factorial(x), yang didefinisikan sebagai berikut:
def calc_factorial(x):
#Fungsi rekursif untuk menemukan faktorial bilangan bulat
jika x == 1:
kembali 1
lain
kembali (x * calc_factorial(x-1))
Apa yang akan terjadi jika Anda memanggil fungsi ini dengan bilangan bulat positif seperti 4? Nah, setiap pemanggilan fungsi akan menambahkan bingkai tumpukan sampai kita mencapai kasus dasar (ketika jumlahnya berkurang menjadi 1). Kondisi dasar diperlukan agar rekursi berakhir dan tidak berlangsung terus menerus. Jadi, dalam kasus yang diberikan, nilai 24 akan dikembalikan setelah panggilan keempat.
Implementasi Fungsi rekursif R di Python
Ada beragam aplikasi fungsi rekursif di Python. Misalnya, Anda ingin membuat grafik dengan pola berulang, katakanlah kepingan salju Koch. Rekursi dapat digunakan untuk menghasilkan pola fraktal, yang terdiri dari versi yang lebih kecil dari desain yang sama.
Contoh lain adalah pemecahan permainan. Anda dapat menulis algoritme rekursif untuk menyelesaikan Sudoku dan berbagai game kompleks. Rekursi paling sering digunakan dalam pencarian, pengurutan, dan masalah traversal.
Fitur mencolok dari fungsi ini adalah implementasi rekursif memungkinkan pelacakan mundur. Jadi, rekursi adalah tentang membangun solusi secara bertahap dan menghapus solusi yang tidak memenuhi kendala masalah pada tahap apa pun. Dua hal diperlukan untuk mencapai hal ini – mempertahankan status dan struktur data yang sesuai. Baca terus untuk mengetahui istilah-istilah ini.
Baca: Gaji Pengembang Python di India
Mempertahankan negara
Setiap panggilan rekursif di Python memiliki konteks eksekusinya sendiri. Saat berurusan dengan fungsi rekursif dengan Python, Anda harus menghubungkan status melalui setiap panggilan rekursif. Dengan ini, status saat ini menjadi bagian dari konteks eksekusi panggilan saat ini. Anda juga dapat menjaga status dalam lingkup global.
Misalnya, jika Anda menggunakan rekursi untuk menghitung 1+2+3+4+…….+10. Di sini, angka saat ini yang Anda tambahkan dan jumlah yang terakumulasi ke titik itu membentuk status yang perlu Anda pertahankan. Mempertahankan status melibatkan melewati status terkini yang diperbarui sebagai argumen melalui setiap panggilan. Inilah cara Anda dapat melakukannya.
def sum_numbers(angka_saat ini, akumulasi_jumlah)
#kasus dasar
#Kembalikan status akhir
jika nomor saat ini==11:
kembali akumulasi_sum
#Kasus rekursif
#Thread keadaan melalui panggilan rekursif
Lain:
kembali sum_numbers(current_number + 1, akumulasi_sum + current_number)

Atau, Anda dapat menggunakan status global yang bisa berubah. Untuk mempertahankan status menggunakan metode ini, Anda menjaga status dalam lingkup global.
nomor_saat ini = 1
akumulasi_jumlah = 0
def sum_numbers():
global saat ini_number
akumulasi_sum global
#kasus dasar
jika current_number==11
kembali akumulasi_sum
#Kasus rekursif
lain:
akumulasi_sum = akumulasi_sum + angka_saat ini
current_number = current_number + 1
kembali jumlah_angka()
Struktur Data Rekursif
Struktur data dianggap rekursif jika dapat didefinisikan dalam versi yang lebih kecil dan lebih sederhana dari dirinya sendiri. Contoh struktur data rekursif termasuk daftar, pohon, struktur hierarki, kamus, dll. Daftar dapat memiliki daftar lain sebagai elemen. Sebuah pohon memiliki sub-pohon, simpul daun, dan sebagainya.
Penting untuk dicatat di sini bahwa struktur fungsi rekursif sering dimodelkan setelah struktur data yang dibutuhkan sebagai input. Jadi, struktur data rekursif dan fungsi rekursif berjalan beriringan.
Rekursi dalam Perhitungan Fibonacci
Matematikawan Italia Fibonacci pertama kali mendefinisikan angka Fibonacci pada abad ke-13 untuk memodelkan pertumbuhan populasi kelinci. Dia menyimpulkan bahwa mulai dari satu pasang kelinci pada tahun pertama, jumlah pasangan kelinci yang lahir pada tahun tertentu sama dengan jumlah pasangan kelinci yang lahir pada masing-masing dua tahun terakhir. Ini dapat ditulis sebagai: Fn = Fn-1 + Fn-2 (Kasus dasar: F0=1 dan F1=1).
Saat Anda menulis fungsi rekursif untuk menghitung bilangan Fibonacci, itu dapat menghasilkan rekursi naif. Ini terjadi ketika definisi fungsi rekursif diikuti secara naif, dan Anda akhirnya menghitung ulang nilai yang tidak perlu. Untuk menghindari penghitungan ulang, Anda dapat menerapkan dekorator lru_cache ke fungsi tersebut. Ini menyimpan hasil dan menyimpan proses agar tidak menjadi tidak efisien.
Baca lebih lanjut: 10 Alat Python Teratas yang Harus Diketahui Setiap Pengembang Python
Pro dan Kontra dari Rekursif
Rekursi membantu menyederhanakan tugas yang kompleks dengan membaginya menjadi sub-masalah. Fungsi rekursif membuat kode lebih bersih dan juga membuat urutan yang tidak rumit. Tetapi rekursi tidak datang tanpa keterbatasannya. Terkadang, panggilan mungkin terbukti mahal dan tidak efisien karena menghabiskan banyak waktu dan memori. Fungsi rekursif juga sulit untuk di-debug.
Membungkus
Dalam artikel ini, kami membahas konsep rekursi Python , mendemonstrasikannya menggunakan beberapa contoh, dan juga membahas beberapa kelebihan dan kekurangannya. Dengan semua informasi ini, Anda dapat dengan mudah menjelaskan fungsi rekursif dalam wawancara Python Anda berikutnya!
Jika Anda penasaran untuk belajar tentang ilmu data, lihat Diploma PG IIIT-B & upGrad dalam Ilmu Data yang dibuat untuk para profesional yang bekerja dan menawarkan 10+ studi kasus & proyek, lokakarya praktis, bimbingan dengan pakar industri, 1- on-1 dengan mentor industri, 400+ jam pembelajaran dan bantuan pekerjaan dengan perusahaan-perusahaan top.
Mengapa rekursi begitu penting?
Jika Anda seorang programmer, maka sangat penting bagi Anda untuk berpikir secara rekursif. Alasannya adalah bahwa fungsi rekursif akan membantu Anda memecah program yang kompleks menjadi program yang lebih kecil. Anda juga akan melihat bahwa solusi rekursif jauh lebih mudah dibaca dibandingkan dengan solusi iteratif.
Anda akan sering melihat bahwa program tertentu memakan banyak ruang dan baris kode untuk berfungsi. Ada beberapa skenario dimana program ini dapat disederhanakan dengan menambahkan fungsi rekursif sehingga fungsi tersebut dipanggil lagi dan lagi kapanpun dibutuhkan. Jadi, Anda tidak perlu menulis begitu banyak baris kode tambahan, dan pekerjaan juga selesai dengan efektif.
Apa saja aplikasi rekursi?
Ada banyak aplikasi praktis rekursi terlihat di kedua fungsi komputasi dan kehidupan nyata. Tanpa penggunaan rekursi, tidak mungkin untuk menyatakan fungsi matematika tertentu seperti deret Fibonacci, fungsi Ackermann, untuk menentukan apakah suatu bilangan adalah palindrom atau bukan, menggambar jenis fraktal, dan banyak lagi.
Ada beberapa perangkat lunak dan aplikasi yang dibangun melalui fungsi matematika ini. Misalnya, Candy Crush menggunakan fungsi matematika dan rekursi ini untuk menghasilkan kombinasi ubin. Selain itu, catur juga merupakan contoh klasik dari penerapan rekursi. Mayoritas algoritma pencarian yang kita gunakan saat ini juga menggunakan rekursi.
Apa aturan dasar rekursi?
Fungsi rekursif adalah fungsi yang dapat memanggil dirinya sendiri untuk memecahkan masalah yang kompleks dengan menyederhanakannya dalam langkah-langkah kecil yang berbeda. Ada empat aturan dasar rekursi. Harus ada kasus dasar yang dapat diselesaikan tanpa bantuan rekursi. Setiap kasus yang harus diselesaikan secara rekursif harus selalu membuat kemajuan menuju kasus dasar. Gunakan bukti dengan induksi dalam aturan perancangan untuk mengasumsikan bahwa semua panggilan rekursif berfungsi. Anda tidak boleh menggunakan panggilan rekursif terpisah untuk memecahkan masalah yang sama. Sebaliknya, Anda harus menggunakan pemrograman dinamis.