在每次迭代中,由于n
减少,当减少到条件变为假并且循环中断时。1
--n
n
0
n > 0
for (p = 1; n > 0; --n)
^
| When n = 0, condition becomes 0 > 0 that is false
在循环中,您是乘法p = p * base;
计算=> base * base * base * ...n times
=> base n。
p
is 用于在末尾存储结果 p = base n。
你可能喜欢这样写(一个小代码,我也觉得有点快):
int p;
for (p = 1; n-- && (p*=base) ;)
return p;
编辑: 评论和答案:
for (p = 1; n > 0; --n)
-计数器何时开始?
是n
的,是计数器,在 for 循环中我们不需要初始化n
。我们只是初始化p
变量1
来存储结果。的值n
来自函数参数。int power(int base, int n);
您在 main 中的某个位置调用您的函数,例如:
result = power(3,2); // here base = 3, and n = 2
或者
result = power(5,7); // here base = 5, and n = 7
从 n 到 p(到 1)?
循环运行n
to1
次(不是条件是> 0
) 例如
在第一个示例中,当您调用 时power(3,2);
,循环运行 for n
= 2
to 1
。同样在函数power(5,7);
循环的第二次调用中运行 for n
= 7
to 1
。
为什么我们需要 p ?
正如我在上面的回答中所写,p
我们需要存储结果。例如
p
最初在循环中,但在每次迭代中,1
您乘以值并将结果存储回仅。例如
,对于函数调用循环运行并计算如下:p
base
p
power(3,2);
p
基数 = 3,n = 2 p = 1;// 初始化
第一次迭代:
condition n > 0 is True because n is 2 (2 > 0).
p = p * base = 1 * 3 = 3
and p becomes 3.
Now --n decreases n to 1
第二次迭代:
condition n > 0 is True because n is 1 (1 > 0).
p = p * base = 3 * 3 = 9
and p becomes 9.
Now --n decreases n to 0
第三次迭代:
condition n > 0 is False because n is 0 (0 > 0).
condition false so loop breaks
返回p
3 2 = 9
。