PHP实现递归排序

简介: 在leetcode练习算法的时候,发现一个算法需要用到递归。递归是个好东西,但是吧,一般不理解其精髓的,很难写出一个好的递归。递归其实就是函数本身直接或者间接地调用自身的一种编程方法(我自己调用我自己~),也可以理解为有反复执行过程的一种方法,这个就与循环非常相似,但是递归调用的函数中必须要有终止条件,也就是一定

在leetcode练习算法的时候,发现一个算法需要用到递归。

递归是个好东西,但是吧,一般不理解其精髓的,很难写出一个好的递归。

递归其实就是函数本身直接或者间接地调用自身的一种编程方法(我自己调用我自己~),也可以理解为有反复执行过程的一种方法,这个就与循环非常相似,但是递归调用的函数中必须要有终止条件,也就是一定要有跳出反复执行过程的条件,否则就会成为死循环。

1:静态变量

这种方法我们主要利用static定义静态变量来实现递归排序。如上我们定义了一个digui1方法和静态变量i,如果我们不给i,如果我们不给i,如果我们不给i变量添加判断,而是直接运行,显然就会出现死循环。

所以这里我们添加了一个if条件判断语句。最后循环调用自身方法,

php

/**
     * 静态变量实现
     */
    function digui1()
    {
        static $i = 0;
        echo $i;
        $i++;
        if($i <= 10)
        {
            digui1();
        }
        return;
    }
    digui1();

复制代码

/**
     * 静态变量实现
     */
    function digui1()
    {
        static $i = 0;
        echo $i;
        $i++;
        if($i <= 10)
        {
            digui1();
        }
        return;
    }
    digui1();

2:全局变量实现

此种方法主要利用global定义全局变量来实现PHP递归排序。如上我们先定义了一个ii变量,再创建一个digui2方法,在这个方法中,定义ii变量,再创建一个digui2方法,在这个方法中,定义ii变量,再创建一个digui2方法,在这个方法中,定义ii为全局变量,那么最后循环调用自身方法结果和上述结果是一样的:

php

复制代码

$ii = 0;
    /**
     * 全局变量实现
     */
    function digui2()
    {
        global $ii;
        echo $ii;
        $ii++;
        if($ii<=10){
            digui2();
        }
    }
    digui2();

3:引用传值实现

大家在使用这个方法时,可以简单了解下PHP中引用传递的概念:可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。利用引用传参来实现PHP递归排序是最基础简单的一种算法了。

注:在调用自身方法时,一定要将参数传递进去,否则就会报错。

php

复制代码

/**
     * 引用传值实现
     */
    function digui3(&$ss)
    {
        echo $ss;
        $ss++;
        if($ss <= 10)
        {
            digui3($ss);
        }
    }
    $ss = 0;
    digui3($ss);

以上就是实现递归的三种方法,挺有意思的,下面我是用递归来实现字符串反转。

php

复制代码

/**
     * 相当于两层循环翻转字符串
     */
    function reversal_one($str)
    {
        var_dump("sss:".$str);
        static $result = '';
        if (strlen($str) > 0) {
            reversal_one(substr($str, 1));
        }
        var_dump("qqqqq:".$str);
        $result .= substr($str, 0, 1);
        var_dump("vvvvvvvv:".$result);
        return $result;
    }
    $s = "hello";
    $res = reversal_one($s);
    var_dump($res);

以上就是关于递归的基本内容。

有好的建议,请在下方输入你的评论。

欢迎访问个人博客 guanchao.site

欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”

目录
相关文章
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
|
6月前
|
SQL PHP 数据库
php数组随机排序
PHP中对数据进行随机排序
|
4月前
|
存储 PHP 索引
|
JSON PHP 数据格式
php清洗数据实战案例(2):根据键值进行二维数据的对象数组的排序
php清洗数据实战案例(2):根据键值进行二维数据的对象数组的排序
80 0
PHP 多维数组排序
PHP 多维数组排序
|
PHP
PHP递归和循环的速度测试
写了一个可以对 $_GET`, `$_POST 等输入进行过滤的函数,做了PHP递归和循环的速度测试。
77 0
|
Java PHP
关于php递归函数内存溢出的问题
关于php递归函数内存溢出的问题
121 1
关于php递归函数内存溢出的问题
|
Web App开发 Rust 安全
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
138 0