- 题目:实现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; } };