使用嵌套循环处理复杂模式生成

嵌套循环是生成复杂图案和模式的理想工具,特别是在需要控制行、列或多个维度的输出时。下面介绍如何使用嵌套循环生成各种复杂模式。

1. 基础三角形模式

直角三角形(左对齐)

php

$rows = 5;

for ($i = 1; $i <= $rows; $i++) {

for ($j = 1; $j <= $i; $j++) {

echo "* ";

echo "\n";

输出:

倒直角三角形

php

$rows = 5;

for ($i = $rows; $i >= 1; $i--) {

for ($j = 1; $j <= $i; $j++) {

echo "* ";

echo "\n";

输出:

2. 金字塔和菱形模式

金字塔模式

php

$rows = 5;

for ($i = 1; $i <= $rows; $i++) {

// 打印空格

for ($k = $rows; $k > $i; $k--) {

echo " ";

// 打印星号

for ($j = 1; $j <= (2 * $i - 1); $j++) {

echo "*";

echo "\n";

输出:

钻石形状

php

$n = 5;

// 上半部分

for ($i = 1; $i <= $n; $i++) {

for ($j = $n; $j > $i; $j--) echo " ";

for ($k = 1; $k < 2 * $i; $k++) echo "*";

echo "\n";

// 下半部分

for ($i = $n - 1; $i >= 1; $i--) {

for ($j = $n; $j > $i; $j--) echo " ";

for ($k = 1; $k < 2 * $i; $k++) echo "*";

echo "\n";

输出:

3. 数字和字母模式

数字金字塔

php

$rows = 5;

for ($i = 1; $i <= $rows; $i++) {

for ($k = $rows; $k > $i; $k--) echo " ";

for ($j = 1; $j <= $i; $j++) echo $j;

for ($j = $i - 1; $j >= 1; $j--) echo $j;

echo "\n";

输出:

1

121

字母金字塔

php

$rows = 5;

$char = 'A';

for ($i = 1; $i <= $rows; $i++) {

for ($k = $rows; $k > $i; $k--) echo " ";

for ($j = 1; $j <= $i; $j++) echo $char++;

$char--;

for ($j = 1; $j < $i; $j++) echo --$char;

$char = 'A';

echo "\n";

/*输出:

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

4. 复杂组合模式

棋盘模式

php

$size = 8;

for ($i = 0; $i < $size; $i++) {

for ($j = 0; $j < $size; $j++) {

echo ($i + $j) % 2 == 0 ? "■ " : "□ ";

echo "\n";

输出:

螺旋矩阵

php

$n = 5;

$matrix = array_fill(0, $n, array_fill(0, $n, 0));

$value = 1;

$top = 0; $bottom = $n - 1;

$left = 0; $right = $n - 1;

while ($top <= $bottom && $left <= $right) {

// 从左到右填充顶部行

for ($i = $left; $i <= $right; $i++) $matrix[$top][$i] = $value++;

$top++;

// 从上到下填充右侧列

for ($i = $top; $i <= $bottom; $i++) $matrix[$i][$right] = $value++;

$right--;

// 从右到左填充底部行

if ($top <= $bottom) {

for ($i = $right; $i >= $left; $i--) $matrix[$bottom][$i] = $value++;

$bottom--;

// 从下到上填充左侧列

if ($left <= $right) {

for ($i = $bottom; $i >= $top; $i--) $matrix[$i][$left] = $value++;

$left++;

// 打印螺旋矩阵

for ($i = 0; $i < $n; $i++) {

for ($j = 0; $j < $n; $j++) {

printf("%2d ", $matrix[$i][$j]);

echo "\n";

输出:

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

5. 高级模式技巧

使用函数生成模式

php

function printPattern($rows, $patternFn) {

for ($i = 1; $i <= $rows; $i++) {

for ($j = 1; $j <= $rows; $j++) {

echo $patternFn($i, $j, $rows) . " ";

echo "\n";

// 圆形模式

printPattern(9, function($i, $j, $n) {

$mid = ($n + 1) / 2;

$distance = sqrt(($i - $mid)**2 + ($j - $mid)**2);

return $distance < $mid ? "■" : " ";

动态模式生成

php

$patterns = [

'triangle' => function($rows) {

for ($i = 1; $i <= $rows; $i++) {

for ($j = 1; $j <= $i; $j++) echo "* ";

echo "\n";

},

'square' => function($rows) {

for ($i = 1; $i <= $rows; $i++) {

for ($j = 1; $j <= $rows; $j++) echo "* ";

echo "\n";

},

'diagonal' => function($rows) {

for ($i = 1; $i <= $rows; $i++) {

for ($j = 1; $j <= $rows; $j++) echo $i == $j ? "* " : " ";

echo "\n";

$patterns['triangle'](5);

echo "\n";

$patterns['square'](5);

echo "\n";

$patterns['diagonal'](5);

最佳实践

  1. 分解问题:将复杂模式分解为行和列的简单模式
  2. 使用辅助函数:对于特别复杂的模式,创建辅助函数计算每个位置的值
  3. 预计算值:对于需要复杂计算的模式,考虑预计算部分值
  4. 可视化调试:在开发过程中,添加调试输出显示当前行列索引
  5. 优化循环范围:尽量减少内层循环的计算量

嵌套循环提供了强大的模式生成能力,通过创造性地控制内外层循环的关系,可以生成几乎任何想象的到的二维模式。