萌新想问一下大佬这块 PHP 代码为什么递归了 254 次后就停止输出了

2020-03-06 16:10:19 +08:00
 UnrealEngine

$xy = array('x' => 0, 'y' => 5);

function math($xy) {

$y = $xy['y'];
if ($y%2 == 0){
    $y = $y/2;
} else if ($y%2 == 1) {
    $y = $y + 3;
}
$xy['y'] = $y;
$xy['x'] += 1;
print_r($xy);echo '<br>';
math($xy);

}

math($xy);

3231 次点击
所在节点    PHP
8 条回复
tonytonychopper
2020-03-06 16:11:24 +08:00
大佬,你这排版别人咋看呀
UnrealEngine
2020-03-06 16:12:23 +08:00
@tonytonychopper 重新排了一次 再看看可以不
b821025551b
2020-03-06 16:15:20 +08:00
PHP 递归会出现两个问题:
1:内存超了;
2:最大递归深度超了;

1 可以用一些方法去优化,比如 yield ; 2 无解,没有尾递归优化;
所以尽量避免用递归去处理层级太多的问题。
miaotaizi
2020-03-06 16:16:22 +08:00
php 配置文件中有一个最大深度的限制, 可以去条一下
qq292382270
2020-03-06 16:16:29 +08:00
貌似没有跳出代码,所以是个死循环? 所以跑到 php 不想跑为止... 我猜的....
Fu4ng
2020-03-06 16:18:17 +08:00
最大深度超了吧
UnrealEngine
2020-03-06 16:18:33 +08:00
@qq292382270 对 想试试不跳出递归会有哪些问题
zhengwenk
2020-03-06 17:24:52 +08:00
php 是有最大栈空间的限制,无限递归会导致爆栈 Core。当然如果你内存超过了配置的 limit 也会报错。
如果你只是 254 次 是部是报这个错误 Fatal error:Maximum function nesting level of ’255′ reached, aborting!
这个是 xdebug 扩展报的错误

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/650446

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX