这里我有一个简单的算法,通过将所有奇数等于输入的数字来计算数字的平方,这样:
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循环之前先减少(反之亦然{{1} }})。我的问题是,它为什么会有所作为?不管增量顺序如何,while循环是否总是最后执行?我必须遗漏一些明显的东西,但这对我来说似乎很奇怪,几乎就像number--
使条件行为像number--
循环一样。
答案 0 :(得分:3)
可以写两个候选循环(相当于):
while (number-- != 0)
while (--number != 0)
考虑在number == 1
循环条目时会发生什么:
number
的值与零进行比较,然后递减;由于1
不是0
,因此执行循环体。number
的值递减,然后与零比较;由于0
为0
,因此循环体不执行。这就是区别!
答案 1 :(得分:2)
while (number--)
执行以下操作:
while (number)
number--
另一方面,while (--number)
执行此操作:
--number
while (number)
醇>
这就是区别。
答案 2 :(得分:1)
这是编写代码的可怕方式,但是......
表达式有两个特征:返回值和side
效果。减量是副作用;这是相同的
适用于--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;
}
在这两种情况下,您都在测试函数的返回值。