当前位置:编程学习 > php >>

对函数及递归的通俗理解

没有基础的兄弟可能对函数的递归比较难以理解,特别是递归里返回输出的概念理不清,是如何返回的。
下面是课本上的列子,就拿出来,用我的理解来做解释。希望能帮到对这块还没弄懂的兄弟。
<?php
    function test($n){
        echo $n."nbsp";        
        if($n>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 "<--->";  //不执行
                                 }
        &
补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,