Swift-数值的整数次幂

题目:实现函数double Power(double base, int exponent),求base的exponent次幂。不得使用库函数,同时不需要考虑大数问题.

常规解法

    func power(base:Double,exponent:Int) -> Double {
        if base == 0 {
            return 0
        }
        
        if exponent == 0 {
            return 1
        }
        
        let num:Int = exponent > 0 ? exponent :abs(exponent)
        let result:Double = self.multiWithExponent(base: base, exponet: num)
        //let result:Double = self.multiWithExponentRecursion(base: base, exponet: num)
        //let result:Double = self.multiWithExponentNormal(base: base, exponet: num)
        if exponent < 0 {
            return 1.0/result
        }
        return result
    }
    
    func multiWithExponent(base:Double,exponet:Int) -> Double {
        var result:Double = 1
        for _ in 0..<exponet {
            result *= base
        }
        return result
    }

递归解法

计算结果可以通过递归减少循环的次数,注意奇偶数判断.

    func multiWithExponentRecursion(base:Double,exponet:Int) -> Double {
        if exponet == 0 {
            return 1
        }
        
        if exponet == 1 {
            return base
        }
        
        var result:Double = self.multiWithExponent(base: base, exponet: exponet>>1)
        result *= result
        if  (exponet & 1) == 1 {
            result *= base
        }
        return result
    }

非递归解法

    // 非递归
    func multiWithExponentNormal(base:Double,exponet:Int) -> Double {
        var result:Double = 1.0
        var tempBase:Double = base
        var tempExponet:Int = exponet
        
        while tempExponet > 0 {
            if (tempExponet & 1) == 1{
                result *= tempBase
            }
            tempBase *= tempBase
            tempExponet = tempExponet>>1
        }
        return result
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容