Rumah > Soal Jawab > teks badan
<?php
function fun($i) {
$i++;
echo $i;
if ($i<5) {
fun($i);
}
echo $i;
}
fun(1);
我以为结果会是:23455,实际上是23455432,请问这个432是什么情况?
PHPz2017-05-24 11:36:32
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 递归求解阶乘
:
<?php
function factorial($n) {
if ($n != 1)
$res = $n * factorial($n-1);
else
$res = 1;
return $res;
}
?>
函数功能就是: 计算 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
执行fun(4)
: 由于 4+1<5 判断失败, 不执行 fun(5)
rrreee
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):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🎜🎜
fun(4)
: Memandangkan penghakiman 4+1<5 gagal, fun(5)
tidak dilaksanakan dan hasil output ialah: 55 🎜🎜Keluaran akhir🎜: 23455432🎜🎜
🎜为情所困2017-05-24 11:36:32
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
世界只因有你2017-05-24 11:36:32
Apabila fungsi keseronokan adalah rekursif, apabila dinilai bahawa $i < 5 berpuas hati, ia akan memanggil dirinya sendiri dan menolaknya ke tindanan Pada masa yang sama, ayat terakhir fungsi, gema $i, tidak dilaksanakan ; apabila panggilan rekursif mencapai $i = 5 pada masa ini Mula kembali ke titik timbunan sebelumnya bagi fungsi dan teruskan pelaksanaan. Iaitu, laksanakan ayat terakhir dalam fungsi echo $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
某草草2017-05-24 11:36:32
Anda boleh merujuk artikel ini dan akan jelas jika anda memahami rekursi. http://www.jianshu.com/p/8bee...
天蓬老师2017-05-24 11:36:32
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.