Fungsi Rekursif dan Tiada Mengembalikan dalam Python [Pendua]
Dalam Python, fungsi rekursif boleh menjadi alat yang berkesan untuk menyelesaikan masalah yang kompleks. Walau bagaimanapun, adalah penting untuk memahami mekanisme rekursi untuk mengelakkan hasil yang tidak dijangka.
Pertimbangkan coretan kod berikut:
def get_path(dictionary, rqfile, prefix=[]): for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) else: get_path(directory[filename], rqfile, path)
Fungsi ini bertujuan untuk mengembalikan laluan kepada fail tertentu dalam bersarang kamus. Walau bagaimanapun, apabila dilaksanakan, isu timbul bahawa ia mengembalikan Tiada dan bukannya laluan yang dijangkakan.
Masalahnya terletak pada pengendalian panggilan rekursif. Untuk melaksanakan rekursif dengan betul, hasil panggilan rekursif perlu dikembalikan kepada fungsi panggilan. Dalam kes ini, ia harus dilakukan dalam blok else:
else: return get_path(directory[filename], rqfile, path)
Ini memastikan bahawa fungsi menyebarkan hasil kembali ke rantai rekursif, akhirnya mengembalikan laluan kepada pemanggil.
Sebagai alternatif, mengalih keluar blok else dan sentiasa kembali pada penghujung gelung untuk juga boleh menyelesaikan isu:
for filename in dictionary.keys(): path = prefix + [filename] if not isinstance(dictionary[filename], dict): if rqfile in str(os.path.join(*path)): return str(os.path.join(*path)) return get_path(directory[filename], rqfile, path)
Dengan mengembalikan hasil rekursif secara konsisten, fungsi kini boleh mendapatkan semula dan mengembalikan laluan ke fail yang dikehendaki.
Atas ialah kandungan terperinci Mengapa Fungsi Python Rekursif Saya Tidak Kembali Daripada Laluan yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!