K.Sun

用最简单的文字解释!

pow(x,n)

pow(x,n)一般在编程语言中会直接提供这样的方法,就是求xn,我们假设n是正整数,那么首先最基本的想法就是将n个x相乘:

int power(int x, unsigned int n)
{
    int ret = 1;
    for (int i = 0; i < n; i++) 
        ret *= x;

    return ret;
}

这么写是比较简单,但是时间复杂度为O(n),如果n比较大的时候,那么这个就比较耗时了。

我们可以用分治法来处理这个问题,xn=xn/2xn/2,于是代码就可以这么写了:

#include<stdio.h>
int power(int x, unsigned int n)
{
    if(n == 0)
        return 1;
    else if (n % 2 == 0)
        return power(x, n / 2) * power(x, n / 2);
    else
        return x * power(x, n / 2) * power(x, n / 2);
}

但是上面每个return都算了两次power(x, n / 2),为了避免重复的计算,我们可以将power(x, n / 2)计算出的结果存储起来:

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

这样时间复杂度就成了O(logn)

假如n可能为负数,x可能为小数,那么pow(x,n)的写法如下:

float power(float x, int n)
{
    float temp;
    if(n == 0)
       return 1;
    temp = power(x, n / 2);       
    if (n % 2 == 0)
        return temp * temp;
    else
    {
        if(n > 0)
            return x * temp * temp;
        else
            return (temp * temp) / x;
    }
}  
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36246371/article/details/53992886
文章标签: power
个人分类: Algorithm
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

pow(x,n)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭