我是新手,我知道我在Internet上找到的这个C程序(信誉:http://www.geeksforgeeks.org/archives/28)可以正常工作。

#include<stdio.h>

float power(float x, int y)
{
    float temp;
    if( y == 0)
       return 1;
    temp = power(x, y/2);
    if (y%2 == 0)
        return temp*temp;
    else
    {
        if(y > 0)
            return x*temp*temp;
        else
            return (temp*temp)/x;
    }
}

/* Program to test function power */
int main()
{
    float x=2;
    int y=5;
    printf("%f", power(x, y));
    getchar();
    return 0;
}

我只是想知道如何以及为什么。我在此函数中的代码行之后对我的问题/评论发表了评论...
float temp;
if( y == 0)
   return 1;
       //this I understand because for instance 2^0 is 1
temp = power(x, y/2);
if (y%2 == 0)
    return temp*temp;
        //if y is even, eg. 2^4 then 2^2 * 2^2 is still equal to 16
else
{
    if(y > 0)
        //this part I don't get anymore. eg. 2^5, then temp=2^(5/2)
        return x*temp*temp;
            //2 * 2^(5/2) * 2^(5/2) how? this will become 64 but the answer is 32.
            //but when I run the program it halts the right answer ie, 32
    else
        return (temp*temp)/x;
}

请向我解释发生了什么。也许我只是错过了一些东西。以及它如何成为O(lg n)运行时间。非常感谢你!

最佳答案

注意,用于计算温度的y/2是整数除法。因此,在您评论的问题中,5/2的结果将是2,而不是2.5。

关于c - 将x提升至n次方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11255720/

10-13 07:03