zoukankan      html  css  js  c++  java
  • 递归函数

    第一个函数一直等待最后递归的函数结束返回值之后才能结束。因此递归的时候会有多个相同的函数被调用,且占用各自资源 ,最后同时运行一个个结束; 所以递归层数太深不宜使用, ; 注意要有结束条件

    注意 递归中每个函数值是独立的 ; 如果某些值需要叠加,考虑静态变量或者能接受

     

    例子 :递归计算5前面的和

    例子 :递归借钱

    张三问李四借钱,李四没有说我去找人借,函数1等待;李四去问王五借,函数2等待;王五借钱给李四结束函数3;李四借钱给张三结束函数2;最后张三借到钱了函数1结束

    例子 :文件夹递归

    每次递归碰到文件夹就进去,直到把所有文件夹文件都找出来,本层递归结束,返回。故z.txt最后得出。所以顺序如图,深度优先?

     

    递归实战之级联目录创建与删除

    <?php 
        function delect_dir($path){
            //判断当前路径是否为目录
            if (!is_dir($path)){
                return false;
            }
    
            //打开目录,记住操作目录都要打开
            $od = opendir($path);
            //获得目录每个文件
            while ( ($file = readdir($od)) != false ){
                if ($file == '.' || $file == '..'){
                    continue;
                }
                //每次判断是否为文件则删除,否则目录继续打开做一样操作
                if (!is_dir($path . '/' . $file)){
                    unlink($path . '/' . $file);
                } else {
                    delect_dir($path . '/' .$file);
                }
            }
            closedir($od);    //
            rmdir($path);      //删除里面东西再删除目录
            return true;
        }
            echo delect_dir('./ab') ? 'success' : 'del_fali or dir_no';
     ?>

    注意使用 实例 来分析编码思路 ,当第二次以上操作 和 上一次重复 且都是和本方法 操作一样 时 使用递归

    比如 递归删除文件夹(目录) : 首先判断当前路径是否为文件夹,是,打开文件夹,while循环获取文件夹所有东西,并每次循环判断是否为非目录 是则删除 , 不是则打开该目录 则开始做 一样的操作 还是本方法有的!则递归!

    因为rmdir,故删除完文件夹里面所有东西后,再删除该文件夹

    注意递归处一样传参可能不同

     

    实战之递归打印树形目录

    <?php 
        function create_dir($path){    
            //若该目录存在则直接返回true
            if (is_dir($path)){
                return true;
            }
    
            //若该目录不存在,但父存在,创建该目录
            if (is_dir(dirname($path) ) ){
                return mkdir($path);    //bool
            }
    
            
            create_dir(dirname($path));//若父目录也不存在,则递归创建父目录
            return mkdir($path); //创建父目录后再创建子目录
        }
    
        echo create_dir('./a/b/c') ? '成功' : '失败'; 
        
     ?>

    递归解决多维数组转义字符问题

    <?php 
        $arrr = array('a"',array("b'",'c'));
    
        //转义字符函数
        function addslashes_test($arr){
            foreach($arr as $v =>$k)
            {
                if (is_string($v)){
                    $arr[$k] = addslashes($v);
                } else if (is_array($v)){
                    //递归把第N维的转义并放入1维中
                    $arr[$k] = addslashes_test($v);
                }
            }
            return $arr;
        }
        //$arrr = addslashes_test($arrr);
        print_r(addslashes_test($arrr));
     ?>

    array_reverse()把数组的单元顺序相反的数组

  • 相关阅读:
    计算openlayers两点之间的距离
    node.js Tools for Visual Studio 介绍
    spring.net (3)依赖注入基础
    spring.net (2)环境搭建 对(1)例子的解释和扩充
    spring.net (1) 概念-控制反转(又名依赖注入)
    如何去定义一个jquery插件
    entityframework lamda 使用where时的注意事项
    k8s big-ip control 安装使用
    lb的keepalive问题
    firefox的fq设置图文教程- 【windows,mac通用】
  • 原文地址:https://www.cnblogs.com/lzhlearn/p/5804922.html
Copyright © 2011-2022 走看看