首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试理解幂函数,C编程语言,2e,27

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

Stack Overflow用户
提问于 2017-07-07 05:50:42
回答 4查看 106关注 0票数 0

我正在学习C编程语言,K&R,第2版,第26页,关于power()函数,我被一些东西弄糊涂了:

代码语言:javascript
复制
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?

EN

回答 4

Stack Overflow用户

发布于 2017-07-07 05:57:40

p按以下行递增:

代码语言:javascript
复制
p = p * base;

您可能会将其理解为“取值p,将其乘以base,然后将其存储到p中”。

如果

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

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

这里的预期目的是运行循环n次数。每次从n中减去1,然后在循环变为0时停止循环。这将使np乘以base

票数 2
EN

Stack Overflow用户

发布于 2017-07-07 06:00:50

变量p从不递增。每次循环运行时,它都会乘以base的一个因子。返回值包含所需的功率。

票数 0
EN

Stack Overflow用户

发布于 2017-07-07 07:11:27

代码语言:javascript
复制
for (p = 1; n > 0; --n)

我不喜欢这种充满技巧的编程风格,因为它使人们更难理解代码。在这样一个琐碎的例子中,这不是大问题,但在大型和复杂的代码中,让它变得更加复杂和沉重是一种可怕的编程方式

代码语言:javascript
复制
int power(int base, int n)
{
    int p = 1;
    int x;

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

它不是更容易阅读吗?如果您担心额外的x变量-请不要担心。它将被编译器优化出来。在K&R时代,如今这样的微优化是必要的,感谢上帝,我们可以专注于有效的算法,把微优化留给编译器-实践表明,他们比99.99%的程序员要好得多

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44959445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档