Сгенерировать все двоичные строки длиной n

#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. Хе-хе, не воспринимайте этот совет слишком религиозно, но использование глобальных переменных — плохая привычка. Попробуйте закодировать свой алгоритм таким образом, чтобы они не требовались. 🙂