【问题标题】:PHP - User defined function returns a fatal errorPHP - 用户定义的函数返回一个致命错误
【发布时间】:2017-01-18 09:10:58
【问题描述】:

所以我有这个用户定义的函数:

        function ackermann($n, $m)
        {
            if ($n == 0)
            {
                return 1 + $m;
            }

            if ($m == 0)
            {
                return ackermann($n - 1, 1);
            }

            return ackermann($n - 1, ackermann($n, $m - 1));
        }

        echo ackermann(3, 3);

这应该返回 61 的值,但它会返回这个致命错误:

致命错误:允许的内存大小为 134217728 字节已用尽(已尝试 分配 262144 字节)在 C:\xampp\htdocs\PhpProject1\index.php 上 第 316 行

这只是我们负责用 PHP 编写代码的一组程序的一部分,因为我正在学习 PHP 的介绍性主题。究竟是什么问题?

【问题讨论】:

  • 你想达到什么目的?这么多递归...
  • 这个函数是显示结果 61 ,不是错误3v4l.org/MmGcK
  • 此代码在我的末尾运行良好可能是其他原因导致此错误,您能否分享完整代码
  • @Paradigm :您是否将此代码放在单独的文件中并运行它。似乎由于其他原因发生了一些错误
  • 检查 PhpProject1\index.php 上的第 316 行。

标签: php


【解决方案1】:

那是因为:

return ackermann($n - 1, ackermann($n, $m - 1));

您试图在ackermann函数中调用ackermann函数,该函数试图调用ackerman函数,该函数又调用ackerman函数...

那它永远都行不通了。

你想达到什么目的?

【讨论】:

    【解决方案2】:

    这是因为 PHP 无法在分配给它的内存中完成请求。

    解决方法是在php.ini中增加memory_limit。 默认应该是128M,改成512或者1024;

    memory_limit = 512M;
    

    如果它仍然耗尽,请尝试分析您的代码并检查它是否没有在循环中执行。

    【讨论】:

      猜你喜欢
      • 2013-05-25
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      • 2014-07-21
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多