Mengapa Fungsi Rekursif Python Saya Kadang-kadang Tidak Kembali?

Susan Sarandon
Lepaskan: 2024-11-03 18:22:29
asal
749 orang telah melayarinya

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

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

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!