Fahami rekursi dengan mempertimbangkan fungsi pelaksanaan fungsi tanpa mengambil kira proses panggil balik Jika anda mempertimbangkan proses panggil balik untuk memahami rekursi, anda mesti menganalisis parameter dan pembolehubah dalam keseluruhan proses rekursif, dan ingat apabila ia dipanggil. Agak menyusahkan untuk memanggil fungsi dan kembali ke fungsi panggilan utama. Fungsi beberapa fungsi rekursif yang biasa digunakan diterangkan dengan baik, seperti Penyelesaian faktorial secara rekursif:递归求解阶乘:
执行fun(4): 由于 4+1<5 判断失败, 不执行 fun(5)
rrreee
Fungsinya ialah: Kira faktorial n Pelaksanaan fungsi ialah: Faktorial n = faktorial n * (n-1) cara, tidak perlu mempertimbangkan proses rekursif masalah panggilan Fungsi dalam .Untuk fungsi yang dimaksudkan:
Fungsinya ialah: Input n, output n+1, jika n+1<5, laksanakan fun(n+1), dan kemudian output n+1(bukan baik Huraikan dalam ayat pendek):
Jadi mengikut penerangan fungsi, anda boleh mendapatkan proses pelaksanaan fungsi dan akhirnya mendapat hasilnya.
🎜Laksanakan fun(1): input 1, output 2, 2+1<5, laksanakan fun(2) dan dapatkan fun(2 ) Output hasil, dan kemudian output 2. 🎜🎜Output akhir🎜: 2[output(fun(2))]2🎜🎜
🎜Begitu juga, seronok(2) hasil output: 3[output(fun(3))]3 🎜🎜output akhir🎜:23[output(fun(3))]32🎜🎜
🎜Begitu juga, seronok(3) hasil output: 4[output(fun(4))]4 🎜🎜output akhir🎜:234[output(fun(4))]432🎜🎜
🎜Laksanakan fun(4): Memandangkan penghakiman 4+1<5 gagal, fun(5) tidak dilaksanakan dan hasil output ialah: 55 🎜🎜Keluaran akhir🎜: 23455432🎜🎜
🎜
Fungsi tidak segerak jadi anda melaksanakan fun(1) 2 $i++; echo $i; 3 echo $i; 4 echo $i ; 5 Func panggilan balik(4) $i++; echo $i; 5 Func panggilan balik(4) Kerana selepas $i++, ia sudah lebih besar daripada 5, jadi echo $i berikut (gema bawah $i of fun(4 )) dilaksanakan. fun(4) keseluruhan pelaksanaan fungsi tamat) 4 Memandangkan pelaksanaan func(4) selesai, fun(3) akan terus dilaksanakan Echo bawah $i 3 2 juga mempunyai perkara yang sama logik
Apabila fungsi keseronokan adalah rekursif, apabila dinilai bahawa $i supaya ia mengeluarkan 4, kemudian kembali ke tempat di mana ia ditolak ke tindanan kali terakhir, dan teruskan mengeluarkan 3... sehingga fungsi keseronokan kembali sepenuhnya. Menukar kepada if ($i < 5) { return fun($i);} akan mengeluarkan 23455
Anda boleh memikirkannya dengan cara ini, fungsi ini lakukan ialah separuh pertama menggemakan i, separuh kedua menggemakan i, dan panggilan ke dirinya sendiri dimasukkan di tengah sehingga i=5, yang bersamaan dengan menggemakan i hingga 5 , dan kemudian bergema kembali ke permulaan. Ia berbaloi.. Hanya mempunyai hubungan yang baik dengan dalam dan luar.
Fahami rekursi dengan mempertimbangkan fungsi pelaksanaan fungsi tanpa mengambil kira proses panggil balikPenyelesaian faktorial secara rekursif:
Jika anda mempertimbangkan proses panggil balik untuk memahami rekursi, anda mesti menganalisis parameter dan pembolehubah dalam keseluruhan proses rekursif, dan ingat apabila ia dipanggil. Agak menyusahkan untuk memanggil fungsi dan kembali ke fungsi panggilan utama.
Fungsi beberapa fungsi rekursif yang biasa digunakan diterangkan dengan baik, seperti
递归求解阶乘
:函数功能就是:
计算 n 的阶乘
, 函数功能实现就是:n 的阶乘 = n * (n-1)的阶乘
.这样理解就不用考虑递归过程中的函数调用问题.对于题主的函数:
函数功能就是:
输入 n,输出 n+1, 如果 n+1<5,执行 fun(n+1),再输出 n+1
(不好用一个简短的句子描述):所以根据功能描述,可以得到函数的执行过程,最后得到结果.
执行
fun(1)
: 输入 1, 输出 2, 2+1<5,执行fun(2)
,得到fun(2)
输出的结果,再输出 2.最终输出: 2[输出(fun(2))]2
同样,
fun(2)
输出结果: 3[输出(fun(3))]3最终输出:23[输出(fun(3))]32
同样,
fun(3)
输出结果: 4[输出(fun(4))]4最终输出:234[输出(fun(4))]432
执行Kira faktorial n Pelaksanaan fungsi ialah: Faktorial n = faktorial n * (n-1) cara, tidak perlu mempertimbangkan proses rekursif masalah panggilan Fungsi dalam .
Untuk fungsi yang dimaksudkan:
Fungsinya ialah:fun(4)
: 由于 4+1<5 判断失败, 不执行fun(5)
rrreeeFungsinya ialah:
Input n, output n+1, jika n+1<5, laksanakan fun(n+1), dan kemudian output n+1
(bukan baik Huraikan dalam ayat pendek):fun(1)
: input 1, output 2, 2+1<5, laksanakanfun(2)
dan dapatkanfun(2 )
Output hasil, dan kemudian output 2. 🎜🎜Output akhir🎜: 2[output(fun(2))]2🎜🎜fun(4)
: Memandangkan penghakiman 4+1<5 gagal,fun(5)
tidak dilaksanakan dan hasil output ialah: 55 🎜🎜Keluaran akhir🎜: 23455432🎜🎜 🎜Apabila kembali secara rekursif, ayat ini akan dikeluarkan ke belakang
Fungsi tidak segerak
jadi anda melaksanakan fun(1)
2 $i++; echo $i;
3 echo $i;
4 echo $i ;
5 Func panggilan balik(4) $i++; echo $i;
5 Func panggilan balik(4) Kerana selepas $i++, ia sudah lebih besar daripada 5, jadi echo $i berikut (gema bawah $i of fun(4 )) dilaksanakan. fun(4) keseluruhan pelaksanaan fungsi tamat)
4 Memandangkan pelaksanaan func(4) selesai, fun(3) akan terus dilaksanakan Echo bawah $i
3 2 juga mempunyai perkara yang sama logik
Apabila fungsi keseronokan adalah rekursif, apabila dinilai bahawa $i supaya ia mengeluarkan 4, kemudian kembali ke tempat di mana ia ditolak ke tindanan kali terakhir, dan teruskan mengeluarkan 3... sehingga fungsi keseronokan kembali sepenuhnya. Menukar kepada
if ($i < 5) { return fun($i);}
akan mengeluarkan 23455Anda boleh merujuk artikel ini dan akan jelas jika anda memahami rekursi. http://www.jianshu.com/p/8bee...
Anda boleh memikirkannya dengan cara ini, fungsi ini lakukan ialah separuh pertama menggemakan i, separuh kedua menggemakan i, dan panggilan ke dirinya sendiri dimasukkan di tengah sehingga i=5, yang bersamaan dengan menggemakan i hingga 5 , dan kemudian bergema kembali ke permulaan. Ia berbaloi.. Hanya mempunyai hubungan yang baik dengan dalam dan luar.
.Terima kasih semua, saya faham