在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
欢迎访问我的小程序:打开微信->发现->小程序->搜索“时间里的”