1. 程式人生 > 其它 >劍指offer JZ12數值的整數次方

劍指offer JZ12數值的整數次方

技術標籤:劍指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;
    }
 }
}