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!