V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
eopdsm
V2EX  ›  程序员

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

  •  
  •   eopdsm · 2018-06-24 12:55:54 +08:00 · 2660 次点击
    这是一个创建于 2337 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <?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 都会报错,这是为什么呢?

    求大神说明下这是什么原因造成的呢
    7 条回复    2018-06-24 20:25:03 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2018-06-24 13:01:25 +08:00 via Android
    无限递归导致爆内存了,递归的终结条件没写对
    blankme
        2
    blankme  
       2018-06-24 13:01:37 +08:00 via Android
    3n+1 的数字都可以,其他的都死循环了
    cunkouwdy007
        3
    cunkouwdy007  
       2018-06-24 13:05:50 +08:00 via Android
    递归最后不触发$a==1 会陷入无限循环下去
    你试试把 7 改为 4,10,13
    eopdsm
        4
    eopdsm  
    OP
       2018-06-24 13:13:15 +08:00
    @cunkouwdy007 谢谢
    mingl0280
        5
    mingl0280  
       2018-06-24 14:11:20 +08:00
    if ($a<=1)
    return 1;
    lookas2001
        6
    lookas2001  
       2018-06-24 14:40:45 +08:00
    没仔细看内容还以为说是不同 php 版本的兼容性问题。。。233
    问题的确是爆内存了,仔细考虑一下终止条件吧。
    singer
        7
    singer  
       2018-06-24 20:25:03 +08:00 via iPhone
    变量%3 =1 的都能输出,不然就是死循环
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1374 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:52 · PVG 01:52 · LAX 09:52 · JFK 12:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.