一段 PHP 代码,为啥只有 7 能正常输出呢?

2018-06-24 12:55:54 +08:00
 eopdsm
<?php
function j($a){
if($a==1){
return 1;
}else{
return $a*j($a-3);
}
}

echo j(7);

当输入 7 时正常输出结果 28, 输入其他数字当执行 else 语句时就会报错
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in D:\phpStudy\PHPTutorial\WWW\Qos\test.php on line 6
如果把$a==1 中的值改成其他的数字连输入 7 都会报错,这是为什么呢?

求大神说明下这是什么原因造成的呢
2538 次点击
所在节点    程序员
7 条回复
feiyuanqiu
2018-06-24 13:01:25 +08:00
无限递归导致爆内存了,递归的终结条件没写对
blankme
2018-06-24 13:01:37 +08:00
3n+1 的数字都可以,其他的都死循环了
cunkouwdy007
2018-06-24 13:05:50 +08:00
递归最后不触发$a==1 会陷入无限循环下去
你试试把 7 改为 4,10,13
eopdsm
2018-06-24 13:13:15 +08:00
@cunkouwdy007 谢谢
mingl0280
2018-06-24 14:11:20 +08:00
if ($a<=1)
return 1;
lookas2001
2018-06-24 14:40:45 +08:00
没仔细看内容还以为说是不同 php 版本的兼容性问题。。。233
问题的确是爆内存了,仔细考虑一下终止条件吧。
singer
2018-06-24 20:25:03 +08:00
变量%3 =1 的都能输出,不然就是死循环

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

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

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

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

© 2021 V2EX