当前位置:Gxlcms > PHP教程 > 对函数及递归的通俗理解_PHP教程

对函数及递归的通俗理解_PHP教程

时间:2021-07-01 10:21:17 帮助过:15人阅读

没有基础的兄弟可能对函数的递归比较难以理解,特别是递归里返回输出的概念理不清,是如何返回的。 下面是课本上的列子,就拿出来,用我的理解来做解释。希望能帮到对这块还没弄懂的兄弟。 0){ test($n-1);//调用函数本身。 }else{ echo "<--->"; } echo $n."$nbsp"; } test(3);//调用函数输出。 ?> 得到结果是 3 2 1 0 <---> 0 1 2 3 大家比较容易理解的是前面输出的3 2 1 0 但对于后面的 0 1 2 3 为什么输出不是很清楚。 要理解这个递归的回归输出先要弄清楚,什么是函数, 官方解释: 函数(function)是一段完成指定任务的已命名代码块。 使用函数的理由中有一条是: 可提高程序的重用性 重用性就是可以重复使用,不多次编写相同代码。 就是将程序中重复编写的代码写成函数,然后在其他多处需要使用时只用调用函数名就可使用,而不用再次重复编写相同代码。 通俗简单点讲,函数就是一段已经写好的代码一把已经造好的枪,然后将它放在了公共仓库里, 不同功能的函数都有自己的名字【function 函数名(){}】,如同不同功能的枪也有自己的名字,如来福枪,狙击枪,手枪等,这些取好名的函数和枪都已经编写好,造好,放在仓库。 然后有谁想使用某个功能的函数时,到这个仓库里喊这个函数的名字【函数名()】,就将函数拿了出来使用,如同警察依据任务的不同要求到仓库里拿不同功能的枪一样。 ————这就是函数的定义。 函数的使用: 官方的叫法就是:调用 如 aaa(); 通俗的理解就是:那个谁谁谁(叫函数的名字)过来这里,把交给你的代码给我在这个位置写一遍。 我的理解是,就是是替换,函数的调用就是一个占位符,遇到了这个占位符【aaa()】就替换成这个占位符【aaa()】指定的已经写好的函数里的代码。遇到就替换,然后程序继续按先后的顺序往下执行。 具体例子说明: /*=============装函数(手枪)的仓库=======================*/ function test($n){ echo $n."nbsp"; if($n>0){ test($n-1);//调用函数本身。 }else{ echo "<--->"; } echo $n."$nbsp"; } /*=============装函数(手枪)的仓库======================*/ test(3); //调用函数,按我的想的就是遇到了占位符了,要替换名字叫test的那个函数里的代码,(你也可以理解成到仓库里拿叫test的枪装入3发子弹) 于是test(3)第一次遇到变成了 /***********************第一次调用时替换************************/ echo $n."nbsp"; //这个时候$n=3 子弹是三发 if($n>0){ //判断$n为3大于0 , 执行下边的 test($n-1); //再次遇到调用函数,遇到就替换,(子弹打出去一发) }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; // 这个时候$n=3,所以输出3 /***********************第一次调用时替换************************/ /***********************第二次调用时替换************************/ echo $n."nbsp"; //这个时候$n=3 子弹是三发 if($n>0){ //判断$n>3 执行下边的 echo $n."nbsp"; //这个时候$n=2 子弹是二发 if($n>0){ //判断$n为2大于0, 执行下边的 test($n-1); //再次遇到调用函数,遇到就替换,(子弹再打出去一发) }else{ echo "<--->"; //不执行 } echo $n."$nbsp";//这个时候$n=2,所以输出2 }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; //这个时候$n=3,所以输出3 /***********************第二次调用时替换************************/ /***********************第三次调用时替换************************/ echo $n."nbsp"; //这个时候$n=3 子弹是三发 if($n>0){ //判断$n>3 执行下边的 echo $n."nbsp"; //这个时候$n=2 子弹是二发 if($n>0){ //判断$n为2大于0, 执行下边的 echo $n."nbsp"; //这个时候$n=1 子弹是一发 if($n>0){ //判断$n为1 大于0, 执行下边的 test($n-1); //再次遇到调用函数,遇到就替换,(子弹打出去一发) }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; // 这个时候$n=1,所以输出1 }else{ echo "<--->"; //不执行 } echo $n."$nbsp";//这个时候$n=2,所以输出2 }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; //这个时候$n=3,所以输出3 /***********************第三次调用时替换************************/ /***********************第四次调用时替换************************/ echo $n."nbsp"; //这个时候$n=3 子弹是三发 if($n>0){ //判断$n>3 执行下边的 echo $n."nbsp"; //这个时候$n=2 子弹是二发 if($n>0){ //判断$n为2大于0, 执行下边的 echo $n."nbsp"; //这个时候$n=1 子弹是一发 if($n>0){ //判断$n为1 大于0, 执行下边的 echo $n."nbsp"; //这个时候$n=0 子弹是0发 if($n>0){ //判断$n为0等于0 ,不执行下边的 test($n-1); //因为不执行所以就不替换了。 }else{ echo "<--->"; //输出<----> } echo $n."$nbsp"; // 这个时候$n=0,所以输出0 }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; // 这个时候$n=1,所以输出1 }else{ echo "<--->"; //不执行 } echo $n."$nbsp";//这个时候$n=2,所以输出2 }else{ echo "<--->"; //不执行 } echo $n."$nbsp"; //这个时候$n=3,所以输出3 /***********************第四次调用时替换************************/ /*##################最终得到只有if判断语句和基础表达式组成的代码###########################*/ test(3);//在最开始的时候只调用一次替换; //$n=3 echo $n."nbsp";//输出3 if($n>0){ //test(3-1)替成了下面的 echo $n."nbsp";//输出2 if($n>0){ //test(2-1)替成了下面的 echo $n."nbsp";//输出1 if($n>0){ //test(1-1)替成了下面的 echo $n."nbsp";//输出0 if($n>0){//判断执行 //test()没有替换 test($n-1);//不执行 因为不大约0 }else{ echo "<--->";//输出<---> } echo $n."$nbsp";//输出0 }else{ echo "<--->";//不执行 } echo $n."$nbsp";//输出1 }else{ echo "<--->";//不执行 } echo $n."$nbsp";//输出2 }else{ echo "<--->";////不执行 } echo $n."$nbsp";//输出3 /*##################最终得到###########################*/ 按照最终得到的代码依次输出的结果就是 输出结果就是 3 2 1 0 <--> 0 1 2 3 函数和递归的使用,最终就是解析成上面的代码执行的, 这就是我理解的函数,以及递归,用一句话说:“本来江湖上是没有递归的,出现的函数多了,也就有了递归。” 一点简单的理解,希望能帮助没有基础的兄弟理解函数,理解递归,最终形成自己的理解自己的想法和思路

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477637.htmlTechArticle没有基础的兄弟可能对函数的递归比较难以理解,特别是递归里返回输出的概念理不清,是如何返回的。 下面是课本上的列子,就拿出来,...

人气教程排行