經典演算法學習——求次方函式實現
阿新 • • 發佈:2019-02-03
在如今很多的筆試面試中,都會出現讓你實現某個函式的,並且進行優化,比如降低時間複雜度。而在手寫程式碼中,求次方函式是很高頻的考點。示例程式碼上傳至: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 . 求次方無外乎這兩種結果。 同時要處理好次方為負的情況。