Python Recursion (Fungsi Recursive)

Dalam tutorial ini, anda akan belajar membuat fungsi rekursif (fungsi yang memanggilnya sendiri).

Apakah rekursi?

Rekursi adalah proses menentukan sesuatu dari segi dirinya sendiri.

Contoh dunia fizikal ialah meletakkan dua cermin selari yang saling berhadapan. Setiap objek di antara mereka akan dipantulkan secara berulang.

Fungsi Python Recursive

Di Python, kita tahu bahawa fungsi dapat memanggil fungsi lain. Bahkan mungkin fungsi itu memanggil dirinya sendiri. Jenis konstruk ini disebut sebagai fungsi rekursif.

Gambar berikut menunjukkan fungsi fungsi rekursif yang dipanggil recurse.

Fungsi Rekursif di Python

Berikut adalah contoh fungsi rekursif untuk mencari faktorial bagi bilangan bulat.

Faktor faktor bagi nombor adalah produk bagi semua bilangan bulat dari 1 hingga nombor itu. Contohnya, faktorial 6 (dilambangkan sebagai 6!) Ialah 1 * 2 * 3 * 4 * 5 * 6 = 720.

Contoh fungsi rekursif

 def factorial(x): """This is a recursive function to find the factorial of an integer""" if x == 1: return 1 else: return (x * factorial(x-1)) num = 3 print("The factorial of", num, "is", factorial(num))

Pengeluaran

 Faktor faktor 3 adalah 6

Dalam contoh di atas, factorial()adalah fungsi rekursif kerana ia memanggil dirinya sendiri.

Apabila kita memanggil fungsi ini dengan bilangan bulat positif, fungsi ini secara berulang akan memanggil dirinya sendiri dengan mengurangkan bilangannya.

Setiap fungsi mengalikan nombor dengan faktorial nombor di bawahnya hingga sama dengan satu. Panggilan rekursif ini dapat dijelaskan dalam langkah-langkah berikut.

 faktorial (3) # Panggilan pertama dengan 3 3 * faktorial (2) # Panggilan ke-2 dengan 2 3 * 2 * faktorial (1) # panggilan ke-3 dengan 1 3 * 2 * 1 # kembali dari panggilan ke-3 sebagai nombor = 1 3 * 2 # kembali dari panggilan ke-2 6 # kembali dari panggilan pertama

Mari lihat gambar yang menunjukkan proses langkah demi langkah dari apa yang sedang berlaku:

Mengendalikan fungsi faktorial rekursif

Kekambuhan kita berakhir apabila bilangannya berkurang menjadi 1. Ini disebut keadaan asas.

Setiap fungsi rekursif mesti mempunyai keadaan asas yang menghentikan pengulangan atau jika tidak, fungsi itu menyebut dirinya tidak terbatas.

Jurubahasa Python menghadkan kedalaman rekursi untuk membantu mengelakkan pengulangan yang tidak terbatas, yang mengakibatkan tumpahan tumpukan.

Secara lalai, kedalaman maksimum rekursi adalah 1000. Sekiranya had terlampaui, ia akan menghasilkan RecursionError. Mari kita lihat satu keadaan seperti itu.

 def recursor(): recursor() recursor()

Pengeluaran

 Jejak balik (panggilan terakhir terakhir): Fail "", baris 3, dalam Fail "", baris 2, dalam Fail "", baris 2, dalam Fail "", baris 2, dalam (Baris sebelumnya diulang 996 kali lebih banyak RecursionError: kedalaman recursion maksimum dilebihi

Kelebihan Berulang

  1. Fungsi rekursif menjadikan kodnya kelihatan bersih dan elegan.
  2. Tugas yang kompleks dapat dipecah menjadi sub-masalah yang lebih sederhana dengan menggunakan rekursi.
  3. Penjanaan urutan lebih mudah dengan pengulangan daripada menggunakan beberapa lelaran bersarang.

Kekurangan Pengulangan

  1. Kadang-kadang logik di sebalik pengulangan sukar diikuti.
  2. Panggilan berulang adalah mahal (tidak cekap) kerana memerlukan banyak memori dan masa.
  3. Fungsi rekursif sukar untuk di-debug.

Artikel menarik...