在 while 循环中递增顺序
Increment order in a while loop
在这里,我有一个简单的算法,它通过将所有等于输入数字的奇数相加来计算数字的平方,这样:
1 = 1 = 1-squared
1 + 3 = 4 = 2-squared
1 + 3 + 5 = 9 = 3-squared
等等。算法如下:
int triangleSquare(int number) {
int product = 0;
int currentOdd = 1;
while (number--) {
product += currentOdd;
currentOdd += 2;
}
return product;
}
我的问题是关于细分市场的:
while (number--) { ... }
出于某种原因,我在 while (--number)
和 while (number--)
之间得到了不同的结果,我认为这是因为--number
在执行 while 循环之前应该先递减(number--
反之亦然)。我的问题是,为什么它会有所作为?无论增量顺序如何,while 循环不应该总是最后执行吗?我一定错过了一些明显的东西,但这对我来说似乎很奇怪,几乎就像number--
使条件的行为像一个do {...} while()
循环。
可以编写两个候选循环(等效于):
while (number-- != 0)
while (--number != 0)
考虑在循环入口处number == 1
时会发生什么:
number
的值与零进行比较,然后递减;由于1
不0
,循环体被执行。number
的值递减,然后比较为零;因为0
是0
的,循环体不被执行。
这就是区别!
while (number--)
执行以下操作:
- 评估
while (number)
- 然后
number--
另一方面,while (--number)
这样做:
- 计算
--number
- 然后使用新值评估
while (number)
这就是区别。
这是一种可怕的代码编写方式,但是...
表达式有两个特征:返回值和边影响。 减少是副作用;它是一样的对于--number
和number--
. while
中的条件,但是,取决于返回值; --number
返回递减后的值; number--
前面的值递减。 当递减实际需要时变量上的位置没有真正指定(对于任何一个):一些在前面的序列点之后和下一个序列点之前的时间一。
换句话说:--number
相当于:
int
decr( int& number )
{
number -= 1;
int results = number;
return results;
}
number--
相当于:
int
decr( int& number )
{
int results = number;
number -= 1;
return return;
}
在这两种情况下,您都在测试函数的返回值。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 独立读取-修改-写入顺序
- 擦除while循环中迭代的元素
- QML按钮点击功能执行顺序
- 为什么我不能在 while 循环中创建线程?
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 while 循环显示顺序变量的值
- 在 while 循环中递增顺序
- 布尔表达式的顺序在while循环中重要吗?