V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
eopdsm
V2EX  ›  程序员

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

  •  
  •   eopdsm · Jun 24, 2018 · 3258 views
    This topic created in 2874 days ago, the information mentioned may be changed or developed.
    <?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 replies    2018-06-24 20:25:03 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       Jun 24, 2018 via Android
    无限递归导致爆内存了,递归的终结条件没写对
    blankme
        2
    blankme  
       Jun 24, 2018 via Android
    3n+1 的数字都可以,其他的都死循环了
    cunkouwdy007
        3
    cunkouwdy007  
       Jun 24, 2018 via Android
    递归最后不触发$a==1 会陷入无限循环下去
    你试试把 7 改为 4,10,13
    eopdsm
        4
    eopdsm  
    OP
       Jun 24, 2018
    @cunkouwdy007 谢谢
    mingl0280
        5
    mingl0280  
       Jun 24, 2018
    if ($a<=1)
    return 1;
    lookas2001
        6
    lookas2001  
       Jun 24, 2018
    没仔细看内容还以为说是不同 php 版本的兼容性问题。。。233
    问题的确是爆内存了,仔细考虑一下终止条件吧。
    singer
        7
    singer  
    PRO
       Jun 24, 2018 via iPhone
    变量%3 =1 的都能输出,不然就是死循环
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1078 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 23:00 · PVG 07:00 · LAX 16:00 · JFK 19:00
    ♥ Do have faith in what you're doing.