女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

教室有 2 排座位,每排 3 个。女孩让机器人给每个座位贴编号。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 外层第 1 排内层贴 3 次
  2. 外层第 2 排内层重新贴 3 次
  3. 合计2 乘 3 等于 6

嵌套循环让每次外层动作都包含一轮完整的内层重复。

先固定排号,再走遍这一排的列号,然后换下一排。把两个计数器分开记录,就不会混淆。

01什么是嵌套循环?

一个循环的循环体里还可以再写一个循环,这叫嵌套循环

for (int row = 1; row <= 2; row++) {
    for (int col = 1; col <= 3; col++) {
        std::cout << row << ',' << col << '\n';
    }
}

02它到底怎样执行?

row = 1col = 1,2,3row = 2col = 1,2,3

外层每进入一轮,内层都会从自己的初始化开始重新执行。

03为什么适合处理表格?

表格天然有“行”和“列”两个方向:

(1,1)(1,2)(1,3)(2,1)(2,2)(2,3)

外层循环可以控制行,内层循环控制列。

04两层循环会执行多少次?

如果外层循环 4 次,每次内层循环都执行 5 次,那么最里面的代码总共执行:

4 × 5 = 20 次

这也是以后理解算法效率的重要基础。

05内外层变量能同名吗?

某些作用域下可以写出遮蔽外层名字的代码,但初学阶段不要这样做。

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        // i 表示外层,j 表示内层
    }
}

用不同、含义清楚的名字更容易读懂。

06三层、四层循环可以吗?

语法上可以,但层数越多越难读,而且执行次数可能增长很快。

以后学算法复杂度时,会看到为什么嵌套循环常常意味着更多工作量。

你已经知道了什么

  • 循环可以放在另一个循环内部。
  • 外层每一轮通常会触发内层完整执行自己的循环过程。
  • 嵌套循环适合处理行列、坐标和二维数据。
  • 总执行次数通常要把各层循环次数组合起来考虑。
  • 嵌套层数越多,越需要清楚追踪变量。

下一篇:break 和 continue 是做什么的?

轮到你来试一试

3 排,每排只贴 2 个座位,总共贴几次?

想好了吗?点开看解释

6 次。可以写出 (1,1)、(1,2)、(2,1)、(2,2)、(3,1)、(3,2) 检查有没有遗漏。