Melebihi Kedalaman Rekursi dan Strategi Tebatan
Pengaturcara Python lazimnya menghadapi limpahan tindanan disebabkan oleh rekursi yang mendalam. Apabila kedalaman rekursi maksimum melebihi, RecursionError dinaikkan. Ini berlaku kerana pelaksanaan CPython Python tidak mempunyai pengoptimuman rekursif ekor.
Contoh Fungsi Rekursif Ekor
Pertimbangkan fungsi rekursif ekor berikut:
def recursive_function(n, sum): if n < 1: return sum else: return recursive_function(n-1, sum+n)
Apabila dipanggil dengan n=998, fungsi gagal dengan a RecursionError.
Meningkatkan Had Rekursi
Python menyediakan fungsi sys.getrecursionlimit() untuk mendapatkan semula had rekursi semasa. Secara lalai, had ini agak rendah untuk mengelakkan penggunaan tindanan yang berlebihan. Untuk meningkatkan had, gunakan sys.setrecursionlimit(new_limit).
Awas
Meningkatkan had rekursi berpotensi berbahaya. Rangka tindanan Python, yang menyimpan maklumat panggilan fungsi, boleh menjadi besar. Meningkatkan had yang berlebihan boleh menghabiskan memori yang tersedia.
Alternatif Berulang
Sebagai pendekatan pilihan, cuba tulis semula algoritma secara berulang. Python bukanlah bahasa yang berfungsi, dan rekursi ekor mungkin bukan teknik yang cekap. Penyelesaian berulang selalunya berprestasi lebih baik.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelakkan RecursionError dalam Fungsi Rekursif Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!