1. 程式人生 > >經典演算法學習——求次方函式實現

經典演算法學習——求次方函式實現

      在如今很多的筆試面試中,都會出現讓你實現某個函式的,並且進行優化,比如降低時間複雜度。而在手寫程式碼中,求次方函式是很高頻的考點。示例程式碼上傳至:https://github.com/chenyufeng1991/PowerFunction

題目如下:
實現   double power(double x, int n)函式,實現求x的n次方。注意,n有可能為正或者負。

(1)最簡單的實現,迴圈

// 最簡單的方式,複雜度為n
double power1(double x ,int n)
{
    double result = 1.0;
    int absN = abs(n);
    for (int i = 0; i < absN; i++)
    {
        result *= x;
    }

    return n >= 0 ? result : 1/result;
}


(2)遞迴實現

// 遞迴實現
double power2(double x ,int n)
{
    int times = n / 2;
    int remain = n % 2;

    if (n == 0)
    {
        return 1.0;
    }
    if (n == 1)
    {
        return x;
    }
    if (n == -1)
    {
        return 1 / x;
    }

    if (remain == 0)
    {
        return power2(x, times) * power2(x, times);
    }
    else
    {
        return n > 0 ? power2(x, times) * power2(x, times) * x : power2(x, times) * power2(x, times) * (1 / x);
    }
}

這裡有三個遞迴結束條件,-1,0,1.    

遞迴的思路就是比如求2^8, 那麼其實就是 2^4 * 2^4   .    如果求2^9,那麼其實就是求 2^4*2^4*2  .   求次方無外乎這兩種結果。 同時要處理好次方為負的情況。