劍指offer JZ12數值的整數次方
阿新 • • 發佈:2020-12-26
技術標籤:劍指offer刷題思路記錄演算法javapython
題目描述
給定一個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。
保證base和exponent不同時為0
思路:
快速冪演算法:採用的是遞迴的演算法:
每次減少之前的一半,這樣的話就可以節省一半時間複雜度
遇到次冪是負數的情況就將其轉化為base變為倒數,exponent變為負數的方法然後再計算整數次方,遇到exponent為0的情況就直接返回1,快速冪需要分情況討論,當exponent為偶數時,就將上一次迭代的結果進行二次方,如果是奇數可以拆解為上次的結果二次方,然後再進行對base的相乘。
程式碼:
public class Solution { public double Power(double base, int exponent) { //做法是快速冪 if(exponent<0) { base=1/base; exponent=-exponent; } if(exponent==0) { return 1.0; } double ret=Power(base,exponent/2); if(exponent%2==0) { return ret*ret; } else { return ret*ret*base; } } }