Mengapa fungsi rekursif saya kelihatan tidak mengembalikan Tiada?
Pertimbangkan fungsi rekursif yang mengesahkan input pengguna:
def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # Recursively call the function else: return my_var print('got input:', get_input())
Jika pengguna memasukkan "a" atau "b," semuanya berfungsi seperti yang diharapkan. Walau bagaimanapun, jika pengguna pada mulanya memasukkan input yang tidak sah dan kemudian membetulkannya, fungsi tersebut nampaknya mengembalikan Tiada dan bukannya input pengguna.
Tingkah laku tidak menentu ini berpunca daripada kesilapan dalam cabang rekursif. Walaupun fungsi memanggil dirinya semula dengan betul, ia gagal mengembalikan hasil panggilan rekursif:
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') get_input() # This line should be replaced
Untuk membetulkannya, kita perlu mengembalikan nilai yang diperoleh daripada panggilan rekursif:
if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call
Perubahan ini memastikan fungsi itu mengalir dengan betul ke dalam timbunan rekursif, mengembalikan pengguna yang diperbetulkan input.
# Modified function def get_input(): my_var = input('Enter "a" or "b": ') if my_var != "a" and my_var != "b": print('You didn\'t type "a" or "b". Try again.') return get_input() # We return the result of the recursive call else: return my_var print('got input:', get_input())
Dengan pengubahsuaian ini, fungsi akan mengembalikan input pengguna dengan betul, walaupun selepas mengendalikan input yang tidak sah.
Atas ialah kandungan terperinci Mengapa Fungsi Pengesahan Input Rekursif Saya Tidak Kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!