Существует ли более эффективный способ записи вложенных циклов? - PullRequest
2 голосов
/ 22 мая 2010

Код ниже показывает вложенные циклы while, но это не очень эффективно. Предположим, я хотел расширить код, включив в него 100 вложенных циклов while. Есть ли лучший способ выполнить эту задачу?

<?php 

$count = 1;

 $num = 1;
 $options=3;
 while ( $num <=$options ) 
    { 
echo "(".$num . ") "; 

    $num1 = 1; 
    $options1=3;
    while ( $num1 <=$options1 ) 
    { 
    echo "*".$num1 . "* "; 

        $num2 = 1; 
        $options2=3;
        while ( $num2 <=$options2 ) 
        { 
        echo "@".$num2 . "@ ";  

            $num3 = 1; 
            $options3=3;
            while ( $num3 <=$options3 ) 
            { 
            echo $num3 . " ";   
            $num3++; 
            $count++;
            }

        echo "<br />";
        $num2++; 
        }

    echo "<br />";
    $num1++; 
    }

echo "<br />";
$num++; 
} 
  echo $count;
 ?>

Ответы [ 3 ]

3 голосов
/ 22 мая 2010

Вы, вероятно, должны адаптировать свой алгоритм для использования рекурсии вместо вложенного цикла while.

0 голосов
/ 22 мая 2010

Это достаточно эффективно, если циклы нуждаются в для вложенности.

Как уже говорили другие, рекурсия позволила бы вам «изящнее» вкладывать разные уровни друг в друга, и уровень вложенности можно было бы динамически контролировать, а не жестко программировать в вашей программе - но если вы обнаружите, что ваш дизайн требует если вы вложите 100 петель, то ваш дизайн почти наверняка совершенно сумасшедший.

(Однако в конкретном примере, который вы даете, нет необходимости в каких-либо циклах (или рекурсии) вообще. Поскольку все циклы имеют постоянную длину, вы можете предварительно рассчитать результат и просто отобразить одну строку с константой. Я предполагаю, это гипертетический пример, а не реальный код, который вы хотите написать?)

0 голосов
/ 22 мая 2010

Вы можете использовать рекурсивные функции.

...