Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Fungsi Sawa Rekursif Saya Mengembalikan Kadangkala `Tiada`?

Mengapa Fungsi Sawa Rekursif Saya Mengembalikan Kadangkala `Tiada`?

DDD
DDDasal
2024-12-23 16:46:10843semak imbas

Why Does My Recursive Python Function Return `None` Sometimes?

Memahami Rekursi dan Mengapa Ia Tiada Kembali

Apabila fungsi memanggil dirinya sendiri, ia dikenali sebagai rekursi. Ini boleh menjadi teknik yang berkuasa, tetapi penting untuk memahami konsep nilai pulangan untuk mengelakkan daripada menemui hasil yang tidak dijangka.

Dalam kod Python yang diberikan:

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()
    else:
        return my_var

print('got input:', get_input())

Jika pengguna memasukkan "a " atau "b", fungsi berfungsi seperti yang dimaksudkan dan mengembalikan input. Walau bagaimanapun, isu timbul apabila pengguna memasukkan aksara tidak sah dan kemudian input yang sah. Masalahnya berpunca daripada panggilan rekursif dalam keadaan if.

Apabila my_var bukan "a" atau "b", fungsi tersebut dengan betul menggesa pengguna untuk mencuba lagi. Walau bagaimanapun, panggilan rekursif untuk get_input() tidak mempunyai pernyataan pulangan untuk nilai pulangan fungsi rekursif. Tanpa pemulangan yang betul, Python secara tersirat mengembalikan Tiada apabila fungsi itu jatuh pada penghujungnya.

Untuk membetulkannya, panggilan rekursif harus diubah suai untuk mengembalikan hasil fungsi rekursif:

if my_var != "a" and my_var != "b":
    print('You didn\'t type "a" or "b". Try again.')
    return get_input()

Dengan perubahan ini, fungsi akan mengembalikan my_var dengan betul selepas pengguna memberikan input yang sah, menghalang pengembalian Tiada.

Atas ialah kandungan terperinci Mengapa Fungsi Sawa Rekursif Saya Mengembalikan Kadangkala `Tiada`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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