(函式分治法)實現pow函式(x的y次方冪)

Kobe10發表於2017-02-06
  • 題目:實現pow函式。
  • 題目分析:因為一個一個乘,迴圈太大,參考矩陣連乘問題:對於n=4的話,可以得出x的平方,然後平方與平方相乘。節省計算次數。對於偶數的冪,只要x的平方多次遞迴呼叫即可;對於奇數的冪,只要n-1,就又變成偶數的冪的形式了,無非就是多乘一個x的問題。
  • 程式碼:
    class Solution {
    public:
        //分治法:分而治之
        double pow(double x, int n) {
            if (n < 0)
                return 1.0/power(x, -n);
            else
                return power(x, n);
        }
        double power(double x, int n) {
            if (n == 0)
                return 1;
            double result = 0;
            double temp = pow(x, n/2);//遞迴的處理相乘的冪,重複利用已經的出來的值。
            if (n%2 == 1)
                result = x * temp * temp;//當冪為奇數的時候,多乘一個就變為偶數問題了。
            else
                result = temp * temp;//當冪為偶數的時候,
            return result;
        }
    };

     

相關文章