Pengoptimuman Rekursi Ekor dalam Python
Python tidak mengoptimumkan rekursi ekor, seperti yang disahkan oleh keputusan jelas Guido van Rossum untuk tidak melaksanakannya kerana pemeliharaan yang betul jejak balik.
Soalan: Adakah Python mampu mengoptimumkan rekursi ekor?
Jawapan: Tidak.
Perbincangan :
Untuk menggambarkan isu tersebut, pertimbangkan kod Python berikut yang mengira jumlah siri segi tiga:
def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n)
Apabila dilaksanakan dengan nilai yang besar untuk n, kod ini gagal disebabkan oleh kedalaman rekursi yang berlebihan. Pengoptimuman pengulangan ekor boleh mengurangkan masalah ini dengan menggantikan panggilan rekursif dengan lompatan ke permulaan fungsi dengan parameter yang dikemas kini.
Walau bagaimanapun, Python tidak melaksanakan pengoptimuman rekursif ekor kerana Guido van Rossum mengutamakan mengekalkan jejak balik yang betul.
Pengoptimuman Penyelesaian:
Jika pengoptimuman rekursi ekor dikehendaki, kod Python boleh diubah secara manual untuk menghapuskan rekursi. Berikut ialah versi diubah suai bagi fungsi trisum:
def trisum(n, csum): while True: # Change recursion to a while loop if n == 0: return csum n, csum = n - 1, csum + n # Update parameters instead of tail recursion
Atas ialah kandungan terperinci Adakah Python Melakukan Pengoptimuman Rekursi Ekor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!