试图理解幂函数,C编程语言,2e,27

时间:2017-07-06 21:50:42

标签: c

我正在通过C编程语言,K& R,第2版,第26页,关于power()函数,我感到困惑:

int power(int base, int n)
{
    int p;

    for (p = 1; n > 0; --n)
        p = p * base;
    return p;
}

p如何递增?如果for循环"向后运行直到它变为零",为什么它是n> 0而不是n = 0?

4 个答案:

答案 0 :(得分:2)

p增加以下一行:

p = p * base;

您可以将其视为“获取值p,将其乘以base,并将其存储到p”。

  

如果for循环“向后运行直到它变为零”,为什么n> 0而不是n = 0?

for循环中的第二个参数用于确定循环是否应该运行。因此n > 0表示“只要n大于0,就运行循环”,而n == 0则表示“只要n等于0,运行循环“。

这里的目的是运行循环n次。您每次从1减去n,然后一旦变为0就停止循环。这将p乘以basen次。

答案 1 :(得分:0)

变量p永远不会增加。每次循环运行时,它乘以base因子。返回值包含所需的功率。

答案 2 :(得分:0)

for (p = 1; n > 0; --n)

我不喜欢这种充满技巧的编程风格,因为它使代码更难以理解。在这样一个微不足道的例子中,这不是一个大问题,而是在大型和复杂的代码使得阅读更加复杂和沉重是一种可怕的编程方式

int power(int base, int n)
{
    int p = 1;
    int x;

    for (x = 0; x < n; x++)
        p = p * base;
    return p;
}

阅读不是更容易吗?如果您担心额外的x变量 - 请不要。它将由编译器优化。在K&amp; R时代,这种微观优化现在是必要的购买,感谢上帝,我们可以专注于有效的算法,将微观优化留给编译器 - 并且实践表明它们比99.99%的编码器好得多

答案 3 :(得分:0)

感谢所有精彩的回复。我没有立即做出回应,但我确实注意到我得到了多少回复。如果我在几年前才尝试过这个网站: - )