Rumah > Soal Jawab > teks badan
在一篇博客上看到了一个递归函数,但我感觉划线的那一行似乎永远不为true呢?
因为函数里的第一个判断条件:
if (!root || p == root || q == root) return root;
就决定了left必定是p,q,null之一吧?
我对递归的理解不太深刻,不知道理解的对不对?谢谢。
迷茫2017-04-18 10:55:18
Pertama sekali, anda perlu memahami bahawa terdapat 4 kemungkinan nilai pulangan fungsi rekursif ini:
null, menunjukkan bahawa rekursi ini telah mengenai nod daun dan tidak boleh diteruskan.
p, menunjukkan bahawa rekursi ini telah menemui nod p.
q, menunjukkan bahawa rekursi ini telah menemui nod q.
lowestCommonAncestor, menunjukkan nod moyang sepunya terendah yang telah ditemui.
Mengapa anda mengatakan ini? Anda harus memahami tiga kemungkinan pertama dengan mudah, kerana daripada
<1> jika (!root || p == root || q == root) mengembalikan akar;
Baris kod ini boleh dilihat.
Lihat sekali lagi (saya akan menyingkatnya)
<2> kiri = lowestCommonAncestor(kiri, p, q);
<3> kanan = lowestCommonAncestor(kanan, p, q);
Dua baris ini. Sebelum lowestCommonAncestor sebenar ditemui, fungsi ini hanya boleh mengembalikan null, q, p.
Lihat dua baris ini untuk menilai semula
<4> jika (kiri && kiri != p && kiri != q) kembali ke kiri;
<5> jika (kanan && kanan != p && kanan != q) kembali ke kanan;
Apabila nilai pulangan <2> dan <3> adalah batal, p, q, syarat untuk kedua-dua penghakiman ini tidak dapat dipenuhi, jadi ia tidak akan menjadi dikembalikan.
Jadi kita perlu memasuki penghakiman seterusnya
<6> jika (kiri && kanan) kembali akar;
Apakah maksud ayat ini? Jika tiada balasan daripada penghakiman <4>, <5>, ini bermakna kiri dan kanan hanya boleh menjadi salah satu daripada null, p, q,
dan di sini juga terhad bahawa kiri dan kanan mesti menjadi bukan nol, yang bermaksud Pada masa ini, satu kiri dan kanan mestilah p dan satu lagi q.
Pada masa ini, punca fungsi rekursif pada tahap ini (perhatikan bahawa ia adalah fungsi rekursif pada tahap ini) ialah CommonAncesstor terendah,
jadi ia dikembalikan.
Ayat terakhir
<7> kembali ke kiri ? atau jika kedua-duanya
Jika semuanya batal, kembalikan batal.
. dan q, maka terdapat empat jenis hasil:
PHP中文网2017-04-18 10:55:18
Syarat pertama adalah untuk menentukan akar, dan syarat kedua adalah untuk menentukan kiri.