【40講系列6】遞迴、分治
阿新 • • 發佈:2020-11-21
一、理論
二、典型例題
☆☆①:快速冪->實現計算x的n次冪函式(LC50、劍指12.數值的整數次方)【位元組面試】
思路:採用分治的思想,時間複雜度為O(logn)
class Solution { public double myPow(double x, long n) { // 方法1:遞迴 /* if (n == 0) return 1.0; if (n < 0) return 1 / myPow(x,-n); if ((n & 1) == 1){ return x * myPow(x,n-1); // n為奇數 } return myPow(x * x,n/2); // n為偶數*/ // 方法2:非遞迴 // 思想是:每次把x擴大一倍,同時把冪次n/2,直至將冪降到1 if (x == 0) return 0.0; double res = 1.0; if (n < 0){ x = 1 / x; n = -n; } while (n > 0){ if ((n & 1) == 1){ // 奇數時,會多出一個x res *= x; } x*= x; n >>= 1; } return res; } }