Maison  >  Questions et réponses  >  le corps du texte

php递归函数怎么理解?

php递归函数怎么理解?有实例吗?

oneone2777 Il y a quelques jours2423

répondre à tous(4)je répondrai

  • 数据分析师

    数据分析师2017-10-01 00:18:02

    Comment comprenez-vous les fonctions récursives de PHP ? - Questions et réponses sur le site Web PHP chinois - Comment comprenez-vous les fonctions récursives de PHP ? - Questions et réponses sur le site Web PHP chinois

    Jetez un œil et apprenez.

    répondre
    0
  • 2017-09-11 23:13:16

    function one($x){

    echo $x;

    $x++;

    if($x<10) one($x);

    else echo "Démarrer l'exécution du processus de réservation de mémoire";

    echo $x; //La sortie ici est conservée en mémoire et attend la fin de l'exécution précédente avant d'exécuter ce processus.

    }

    one(5);

    Exécuter le processus en premier, sortie 5 (incrémenté de 1, devient 6, inférieur à 10,) et continuer à s'exécuter, mais à ce moment, le dernier echo $x (6 ) est retenu comme processus n°1 à exécuter

    continue de s'exécuter, les sorties 6, (incrémentées de 1, deviennent 7, inférieur à 10,) continuent de s'exécuter, mais à ce moment, le dernier écho $x (7 ) est retenu comme processus n°2 à exécuter

    Continuer l'exécution, sortie 7, (incrémenter de 1, devenir 8, inférieur à 10,) continuer à s'exécuter, mais à ce moment, le dernier écho $x (8) est réservé comme processus n°3 à exécuter

    Continuer l'exécution, Sortie 8, (incrémenter de 1, devenir 9, inférieur à 10,) continuer à s'exécuter, mais à ce moment, le dernier écho $x (9) est réservé comme processus n°4 à exécuter

    Continuez l'exécution, sortie 9, (incrémentez 1. Devenez 10, pas moins de 10,) ne continuez plus à vous exécuter Sortie 10. En apparence, l'exécution est terminée.留 Mais il y a un processus de réserve à exécuter avant, puis [Rappelez-vous, c'est son exécution] à l'exécution individuelle. Il y a donc une situation d’ordre inverse.

    Eh bien, c'est pourquoi les fonctions récursives sont difficiles à comprendre pour les débutants.

    répondre
    0
  • PHPz

    PHPz2017-02-13 14:04:18

    还可参考这篇文章:php递归函数典型例子

    répondre
    0
  • PHPz

    PHPz2017-02-13 14:01:37

    很多同学在学习递归函数的时候会感到头晕,无法搞清楚递归函数的原理和运行机制,本文将给大家详细讲解递归函数的运行机制和运用。

    那什么是递归函数呢?

    递归函数即为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行,可能这样给大家讲解,还是很难明白。

    好,那下面我们就用一个例子来给大家讲解。

    <?php
    function test($n){
    echo $n." ";
    if($n>0){
    test($n-1);
    }else{
    echo "<-->";
    }
    echo $n." ";
    }
    test(10);
    ?>

    大家首先思考一下,这个例子最终的输出结果是什么?

    好,我们来看一下本函数输出的结果:

    10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

    怎么样,不知道这个结果是否跟大家设想的一样呢?

    好,下面我一步一步来给大家讲解...

    第一步,执行test(10),echo 10,然后因为10>0,执行test(9),后面还有没来得及执行的echo 10

    第二步,执行test(9),echo 9,然后因为9>0,执行test(8),同样后面还有没来得及执行的 echo 9

    第三步,执行test(8),echo 8,然后因为8>0,执行test(7),同样后面还有没来得及执行的 echo 8

    第四步,执行test(7),echo 7,然后因为7>0,执行test(6),同样后面还有没来得及执行的 echo 7

    第五步,执行test(6),echo 6,然后因为6>0,执行test(5),同样后面还有没来得及执行的 echo 6

    ...........

    第十步,执行test(0),echo 0,此时0>0的条件不满足,不在执行test()函数,而是echo “<-->”,并且执行后面的 echo 0

    10 9 8 7 6 5 4 3 2 1 0 <--> 0 1 2 3 4 5 6 7 8 9 10

    此时,输出的内容如上述显示的红色部分,此时函数已经不再调用自己,开始将流程的主控权交回给上一层函数来执行

    也就是开始执行刚刚所有test()函数没来得及输出的最后一个echo

    它的流程是这样子的:

    在函数执行的第一到第十步,函数输出的的是绿色部分,红色部分还“没来及”输出,就该调用自己执行操作,依次类推,直到流程执行到不再满足调用自己的条件,输出“<-->”,此时,流程该执行前面“没来及”输出的代码。

    就像我们平时玩的游戏一样,打死一个怪物,掉出一个宝贝,但是还有其他怪物在等着你来消灭,你不得不消灭完所有的怪物才能回来一个一个地拾宝贝。

    怎么样,这么样跟大家来讲解是不是明白了呢?

    有的同学又会问了,我在执行完所有的test函数之后,最终输出0

    也就是输出到这里,

    10 9 8 7 6 5 4 3 2 1 0 <--> 0

    那为什么下一个输出的是 1 ,而不是 10 呢,

    对于这个问题,为了帮助大家理解,下面我再给大家举一个例子:

    看如下代码:

    <?php
    function one($num){
    echo $num;
    two($num-1);
    echo $num;
    }
    function two($num){
    echo $num;
    three($num-1);
    echo $num;
    }
    function three($num){
    echo $num;
    }
    one(3);
    ?>

    以上代码对test()函数进行分解操作,我们思考:

    执行one(3)函数的时候,同test()函数一样,首先要输出3,然后调用two(2)函数,

    注意,此时还没有输出下面的3,

    接着走,执行two(2)函数,输出2,调用three(1)函数,同样,这里没有来得及输出下面的2,

    执行three(1),直接输出1,不在调用其它函数,

    此时,我们想刚刚的two()函数是不是还没有执行完,好,接着执行two()函数没有完成的部分,two()函数执行完之后,也就是输出下面的2,然后开始执行one()函数没有执行完的部分,也就是输出下面的3,此时所有函数执行完毕。

    那么,输出结果是:

    3 2 1 2 3

    怎么样,大家这样理解起来是不是会容易些呢?

    如果还是不太明白,请在下边跟帖提问,也请给出宝贵建议,我将会做出相应改进和讲解。


    répondre
    4
  • 益伦

    C’est écrit de manière très détaillée. Même si je ne peux pas encore écrire, la logique est fondamentalement claire.

    益伦 · 2017-10-16 22:31:00
  • Annulerrépondre