这东西看起来很高大上,循环方式涉及位运算不好理解。但是递归方式却很简单,也很好理解。
对n次方,拆分为两个近似相等的部分,分别求这两个子部分的次方,然后相乘。
例如,求
3
8
3^8
38拆为
3
4
∗
3
4
3^4*3^4
34∗34,
3
9
3^9
39拆为
3
4
∗
3
5
3^4*3^5
34∗35,这样就将原来
O
(
n
)
O(n)
O(n)的复杂度降到
O
(
log
n
)
O(\log n)
O(logn)。
int pow(int x, int n) {
if (n == 0) return 1;
if (n == 1) return x;
return pow(x , n / 2) * pow(x , n - n / 2) ;
}