Rumah > pembangunan bahagian belakang > Tutorial Python > Adakah Python Melakukan Pengoptimuman Rekursi Ekor?

Adakah Python Melakukan Pengoptimuman Rekursi Ekor?

Susan Sarandon
Lepaskan: 2024-12-07 19:08:14
asal
429 orang telah melayarinya

Does Python Perform Tail Recursion Optimization?

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)
Salin selepas log masuk

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
Salin selepas log masuk

Atas ialah kandungan terperinci Adakah Python Melakukan Pengoptimuman Rekursi Ekor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan