剑指offer

剑指offer(十二)数值的整数次方

2020-03-31  本文已影响0人  向前的zz

数值的整数次方 是为了考察代码完整性
点击进入 牛客网题库:数值的整数次方

题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0

方法一:直接循环

public double Power(double base, int exponent) {
        if(base == 0.0) {
            return 0;
        }
        if(exponent == 0) {
            return 1;
        }

        double tempValue = base;

        for(int i = 1; i < Math.abs(exponent); i++ ) {
            tempValue *= base;
        }

        if(exponent < 0) {
            tempValue = 1/tempValue;
        }
        return tempValue;
    }

方法二:递归

/**
     * 递归的话
     * 1. exponent 偶数  result = a^(n/2) * a^(n/2)
     * 2,exponent 奇数  result = a^((n-1)/2) * a^((n-1)/2) * a
     *
     *  base 为0 的时候直接返回0
     *  exponent 为0的时候返回1   1/2 的时候 exponent就为0了
     *  考虑为负数的时候 需要返回 1/结果
     *
     */
    public double Power(double base, int exponent) {
        if(base == 0) {
            return 0;
        }
        if(exponent > 0) {
            //2为0的时候整除
            if(exponent % 2 == 0) {
                double result = Power(base, exponent/2);
                result *= result;
                return  result;
            } else { //奇数的情况下
                double result = Power(base, exponent/2);
                result *= result;
                result *= base;
                return  result;
            }
        } else if(exponent < 0) {
            double result = Power(base , -exponent);
            return 1/result;
        } else {
            return 1;
        }
    }

递归刚开始做的时候不怎么理解,然后再写 exponent 为负数的时候,还忘记 1/结果了,导致还没有通过

上一篇 下一篇

猜你喜欢

热点阅读