2016-09-10 3 views
0

Так что я этого пользователя определенную функцию:PHP - Определяется пользователем функция возвращает фатальную ошибку

 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, но он возвращает эту фатальную ошибку:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in C:\xampp\htdocs\PhpProject1\index.php on line 316

Этот является лишь частью набора программ, которые нам поручают программировать на PHP, поскольку я беру вводный предмет для PHP. в чем именно проблема?:

+1

Что вы пытаетесь достичь? Так много рекурсии ... –

+0

эта функция показывает результат 61, а не ошибка https://3v4l.org/MmGcK – Dave

+0

Этот код отлично работает, на моем конце может быть что-то еще, чтобы вызвать эту ошибку, пожалуйста, поделитесь полным кодом –

ответ

0

Это связано с тем, что PHP не может выполнить запрос в памяти, назначенной ему.

Решение должно увеличить memory_limit в php.ini. По умолчанию оно должно быть 128M, изменить его на 512 или 1024;

memory_limit = 512M; 

Если он по-прежнему исчерпан, попробуйте проанализировать свой код и проверить, не работает ли он в цикле.

0

Именно из-за этого:

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

Вы пытаетесь вызвать Ackermann функции в Аккерман функции, которая пытается вызвать Акерман функцию, которая вызывает функцию Аккермана ...

Это не будет когда-нибудь работайте.

Чего вы хотите достичь?