首先明白递归是栈结构存储,即先进后出, 来看你这个列子,hello字符串进入substr函数首先得到ello不满足跳出递归条件继续递归,直到最后字符串o满足条件跳出递归,于是执行echo,将o先输出接着将lo第一位输出,接着将llo第一位
我是这么理解的不知道帮到你了么
一个函数在它的函数体内调用它自身称为递归调用。
这种函数称为递归函数。
具体的可以去看下这两个关于递归的介绍http://wwwphpcn/php-weizijiaocheng-314935html,http://wwwphpcn/php-weizijiaocheng-314940html,希望采纳
微信小程序推送服务通知需要收集足够的formid,使用过程中发现如果formid大量失效,在使用递归从redis从获取可用formid的时候会导致栈溢出问题,下面方法是使用php的高阶函数来消除递归,完美解决问题,记录之:
<php
class A
{
public static function factorial($n, $accumulator = 1) {
if ($n == 0) {
return $accumulator;
}
return function() use($n, $accumulator) {
return self::factorial($n - 1, $accumulator $n);
};
}
public static function trampoline($params) {
$result = call_user_func_array('self::factorial', $params);
while (is_callable($result)) {
$result = $result();
}
return $result;
}
public static function run()
{
var_dump(self::trampoline(array(500)));
}
}
A::run();
代码二: 和代码1 的区别是
代码1 是 echo $a'######<br>' 以后 $a+1 了;
结果是
1######2######
3######
4######
5######
6######
7######
8######
9######
10
代码二 $a+1 以后才 $a'######<br>'
109######
8######
7######
6######
5######
4######
3######
2######
1######
其实递归不难理解 无非是执行的次序问题
代码1 的执行次序是
1 demo (1) --输出1######2 demo (2) --输出2######
3 demo (3) --输出3######
4 demo (4) --输出4######
5 demo (5) --输出5######
6 demo (6) --输出6######
7 demo (7) --输出7######
8 demo (8) --输出8######
9 demo (9) --输出9######
10 demo (10) --输出10
返回demo (9)
返回demo (8)
返回demo (7)
返回demo (6)
返回demo (5)
返回demo (4)
返回demo (3)
返回demo (2)
返回demo (1)
代码2 的执行次序是
1 demo (1)
2 demo (2)
3 demo (3)
4 demo (4)
5 demo (5)
6 demo (6)
7 demo (7)
8 demo (8)
9 demo (9)
10 demo (10) --输出10
11 返回demo (9) --输出9######
12 返回demo (8)--输出8######
13 返回demo (7)--输出7######
14 返回demo (6)--输出6######
15 返回demo (5)--输出5######
16 返回demo (4)--输出4######
17 返回demo (3)--输出3######
18 返回demo (2) --输出2######
19 返回demo (1) --输出1######
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)