1. 循环退出的条件
for (; cond; )
while (cond)
循环退出的条件就是 !cond
,就是条件不成立,对条件取反,取其对立事件;
while (lo < hi) ⇒ lo >= hi
while (lo <= hi) ⇒ lo > hi
2. 循环与端点
for (int i = 0; i < n; ++i)
// ⇒ i 最大到达 n-1,也即数组的最后一个元素
for (int i = 0; i < n - 1; ++i)
// ⇒ i 最大到达 n - 2,也即数组的倒数第二个元素
3. reasonable guess(合情猜测)
i, j = 0, 0
while i < n and j < m:
if j == -1 or ...
i, j = i + 1, j + 1
else:
⇒ 一定有对 j 值的修改,会为其赋值为 -1,或执行减少操作
4. 双层循环
// 循环1
for (int i = 0; i < n; ++i){
for (int j = 0; j < i; ++j){
A;
}
B;
}
// 循环2
for (int i = 1; i < n; ++i){
for (int j = 0; j < i; ++j){
A;
}
B;
}
是否循环 2 一定比循环 1 有必要,是否循环 1 的 i = 0,一定是多余的。却也未必。
当 i = 0(循环1),内部循环是无法执行的;但却可以执行语句 B;
故,可考虑当 n = 1;
时,循环 2 外层循环都无法进入。循环1却可进入外部循环,当然无法进入内部循环,当却可以执行语句 B;
5. 回溯
while (**){
***
for (**){
if (**){
***
break;
}
}
}
当循环体内的 if 条件判断通过时,break 语句会跳出 while 内部的 for 循环,执行下一次 while 会执行到的位置。