剑指offer十二之数值的整数次方

一、题目

  给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

二、思路

1、传统方法计算,时间复杂度O(n)

2、递归方式计算,时间复杂度O(logn)

     当exponent为偶数时,例如求base^10,则result= base^5  *  base^5;

     当exponent为奇数数时,例如求base^11,则result= base^5 *  base^5 * base;

     接着采用递归的方法,计算base^5 即可。

三、代码

1、传统方法

public class Solution {
    public double Power(double base, int exponent) {
     
        double result=1;
        for(int i=0;i<Math.abs(exponent);i++){
              result *=base;
        }
        
        if(exponent<0){
           result=1/result; 
        }
        return result;
    }
}
View Code

2、递归的方法

public class Solution {
    public double Power(double base, int exponent) {
        double result=0.0;
         int n=Math.abs(exponent);

        if(n==0)
            return 1;

        if(exponent==1)
            return base;

        if(exponent==-1)
             return 1/base;

        result =Power(base,n>>1)*Power(base,n>>1);
        if((n&1)==1)
            result*=base;
        if(exponent<0)
            result=1/result;

        return result;   
       
    }
}
View Code

-------------------------------------------------------------------------------------------------

参考链接:https://www.nowcoder.com/questionTerminal/1a834e5e3e1a4b7ba251417554e07c00

posted @ 2017-10-01 02:16  AI菌  阅读(233)  评论(0编辑  收藏  举报