请实现函数 pow(x, n).
Implement pow(x, n).
非递归算法:
链接:https://www.nowcoder.com/questionTerminal/0616061711c944d7bd318fb7eaeda8f6?f=discussion
来源:牛客网
public class Solution {
public double pow(double x, int n) {
double res = 1.0;
double tmp = x;
for (int i = n; i != 0; i /= 2) {
if (i % 2 != 0) {
res *= tmp;
}
tmp *= tmp;
}
return n > 0 ? res : 1 / res;
}
}
非递归算法分析:
如n=15,在程序中,i=15->7->3->1
res=x^n
n为每次按2取余剩的阶数之和,每次加上(分的份数*1+1)
3
//
7=1
// \
15=1 3
\ //
7=1
\
3
递归算法:
class Solution {
public:
double myPow(double x, int n) {
if(x == 0)
{
return 0.0;
}
if(n > 0)
{
return Pow(x, n);
}
else
{
return 1 / Pow(x, -n);
}
}
double Pow(double x, int n){
if(n == 0)
return 1;
double mid = Pow(x, n/2);
if(n%2 == 0)
{
return mid * mid;
}
else
{
return mid * mid * x;
}
}
};