#php
#php
Вопрос:
<?php
$n = 3;
$x = array();
function Try1($i){
foreach(array(0,1) as $j){
$x[$i] = $j;
if($i==$n-1){
print_r($x);
}else{
Try1($i 1);
}
}
}
Try1(0);
?>
Я написал фрагмент кода выше, но при запуске я получил сообщение об ошибке: Фатальная ошибка: разрешенный объем памяти 134217728 байт исчерпан (пытался выделить 24 байта) в BinaryStrings.php в строке 5.
Я написал аналогичную версию на python, и она работает, вы можете мне помочь? Спасибо ^^.
Ответ №1:
Переменные $x
и $n
не находятся в той же области видимости, что и остальная часть вашего кода. Они определены вне функции и не передаются в нее, поэтому они не существуют внутри функции. $n-1
следовательно, внутри функции равно -1
, и ваш код попадет в бесконечный цикл. Вот почему вы а) включаете отчеты об ошибках и б) используете условия с <
or >
, not ==
.
Комментарии:
1. большое вам спасибо, я меняю
function Try1($i,$x,$n)
, и это работает очень хорошо. Но как я могу изменить $ x и $ n на глобальную область видимости: -?2. Вы этого не делаете. На самом деле, вы этого не делаете. (Вы можете поискать, как это сделать, но на самом деле не стоит.)
3. извините, мне сейчас неловко 🙁
4. Хе-хе, не воспринимайте этот совет слишком религиозно, но использование глобальных переменных — плохая привычка. Попробуйте закодировать свой алгоритм таким образом, чтобы они не требовались. 🙂