Memahami Gelagat Membingungkan Fungsi Rekursif Python: Mengapa gcdIter Tidak Kembali?
Apabila berurusan dengan fungsi rekursif, adalah penting untuk memahaminya mekanisme pemulangan. Pertimbangkan fungsi gcdIter berikut, bertujuan untuk mengira pembahagi sepunya terbesar (GCD) bagi dua nombor. Walau bagaimanapun, untuk nilai input tertentu (cth., 306 dan 136), ia secara tidak dijangka mengembalikan Tiada.
Isunya terletak pada bahagian rekursif kod:
gcdIter (a,b%a)
Semasa fungsi membuat panggilan rekursif kepada dirinya sendiri dengan parameter yang berkaitan, ia gagal mengendalikan nilai pulangan panggilan itu. Untuk mengekalkan hasil GCD, nilai pulangan mesti dihantar semula ke rantaian:
return gcdIter (a,b%a)
Selain itu, adalah bijak untuk menggunakan tugasan pembolehubah berbilang sasaran untuk menyelaraskan kod:
def gcdIter(a, b): a, b = min(a, b), max(a, b) if b % a == 0: return a return gcdIter(a, b % a)
Dengan menangani isu ini, gcdIter akan secara konsisten mengembalikan GCD untuk sebarang nilai input yang diberikan, seperti yang dijangkakan.
Atas ialah kandungan terperinci Mengapakah `gcdIter` Mengembalikan `Tiada` Apabila Mengira GCD?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!