cari

Rumah  >  Soal Jawab  >  teks badan

php, hasilnya tidak dijangka

<?php
function fun($i) {
    $i++;
    echo $i;
    if ($i<5) {
        fun($i);
    }
    echo $i;
}
fun(1);
我以为结果会是:23455,实际上是23455432,请问这个432是什么情况?
黄舟黄舟2821 hari yang lalu823

membalas semua(7)saya akan balas

  • PHPz

    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 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🎜🎜 🎜

      balas
      0
  • 伊谢尔伦

    伊谢尔伦2017-05-24 11:36:32

    Apabila kembali secara rekursif, ayat ini akan dikeluarkan ke belakang

    balas
    0
  • 为情所困

    为情所困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

    balas
    0
  • 世界只因有你

    世界只因有你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

    balas
    0
  • 某草草

    某草草2017-05-24 11:36:32

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

    balas
    0
  • 天蓬老师

    天蓬老师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.

    .

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-05-24 11:36:32

    Terima kasih semua, saya faham

    balas
    0
  • Batalbalas