关闭

pow(x,n)

标签: power
72人阅读 评论(0) 收藏 举报
分类:

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;
    }
}  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:76132次
    • 积分:3598
    • 等级:
    • 排名:第9132名
    • 原创:214篇
    • 转载:13篇
    • 译文:88篇
    • 评论:5条
    最新评论