php, hasilnya tidak dijangka
黄舟
黄舟 2017-05-24 11:34:32
0
7
811
<?php
function fun($i) {
    $i++;
    echo $i;
    if ($i<5) {
        fun($i);
    }
    echo $i;
}
fun(1);
我以为结果会是:23455,实际上是23455432,请问这个432是什么情况?
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(7)
PHPzhong

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:递归求解阶乘:

<?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(不好用一个简短的句子描述):
所以根据功能描述,可以得到函数的执行过程,最后得到结果.

  1. 执行 fun(1): 输入 1, 输出 2, 2+1<5,执行 fun(2),得到 fun(2) 输出的结果,再输出 2.
    最终输出: 2[输出(fun(2))]2

  2. 同样,fun(2)输出结果: 3[输出(fun(3))]3
    最终输出:23[输出(fun(3))]32

  3. 同样,fun(3)输出结果: 4[输出(fun(4))]4
    最终输出:234[输出(fun(4))]432

  4. 执行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):
  5. Jadi mengikut penerangan fungsi, anda boleh mendapatkan proses pelaksanaan fungsi dan akhirnya mendapat hasilnya.
  1. 🎜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🎜🎜
  2. 🎜Begitu juga, seronok(2) hasil output: 3[output(fun(3))]3 🎜🎜output akhir🎜:23[output(fun(3))]32🎜🎜
  3. 🎜Begitu juga, seronok(3) hasil output: 4[output(fun(4))]4 🎜🎜output akhir🎜:234[output(fun(4))]432🎜🎜
  4. 🎜Laksanakan 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 23455

某草草

Anda boleh merujuk artikel ini dan akan jelas jika anda memahami rekursi. http://www.jianshu.com/p/8bee...

Peter_Zhu

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan