Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Fungsi Rekursif Python Saya Kadang-kadang Tidak Kembali?

Mengapa Fungsi Rekursif Python Saya Kadang-kadang Tidak Kembali?

Susan Sarandon
Susan Sarandonasal
2024-11-03 18:22:29887semak imbas

Why Does My Python Recursive Function Sometimes Return None?

Mengapa Fungsi Rekursif Python Kadang-kadang Mengembalikan Tiada

Tidak seperti fungsi lelaran, fungsi rekursif bergantung pada panggilan rekursifnya untuk mengembalikan nilai. Apabila fungsi dipanggil beberapa kali, nilai pulangan perlu dikendalikan dengan sewajarnya untuk mendapatkan output yang diingini.

Pertimbangkan kod Python berikut:

<code class="python">def gcdIter(a, b):
    a, b = min(a, b), max(a, b)
    if b % a == 0:
        print(a)
        return a
    gcdIter(a, b % a)</code>

Fungsi ini bertujuan untuk mencari yang terbaik pembahagi sepunya dua nombor menggunakan rekursi. Walau bagaimanapun, ia mungkin mengembalikan Tiada untuk input tertentu kerana nilai pulangan panggilan rekursif tidak dikendalikan dengan betul.

<code class="python">print(gcdIter(306, 136)) # Returns None
print(gcdIter(42, 84)) # Returns 42</code>

Untuk menyelesaikan masalah ini, kod perlu menghantar nilai pulangan panggilan rekursif kembali ke fungsi utama. Dengan mengubah suai baris gcdIter(a, b % a) untuk mengembalikan gcdIter(a, b % a), fungsi akan mengembalikan pembahagi sepunya terbesar dengan betul.

<code class="python">def gcdIter(a, b):
    a, b = min(a, b), max(a, b)
    if b % a == 0:
        print(a)
        return a
    return gcdIter(a, b % a)</code>

Sebagai alternatif, fungsi boleh ditulis semula dengan lebih banyak lagi padat sebagai:

<code class="python">def gcd_iter(a, b):
    return gcd_iter(b, a % b) if b else abs(a)</code>

Atas ialah kandungan terperinci Mengapa Fungsi Rekursif Python Saya Kadang-kadang Tidak Kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:BARK - Model TextdioArtikel seterusnya:BARK - Model Textdio