题目:
实现 pow(x, n) ,即计算 x 的 n 次幂函数。

题解思路:
方法一:快速幂递归求解思路

函数代码:
class Solution {
public:
double pow(double x,long N)
{
double res=1.0;
while(N>0)
{
if(N%2==1)
{
res=res*x;
}
x=x*x;
N=N/2;
}
return res;
}
double myPow(double x, int n)
{
long N=n;
if(N>=0)
{
return pow(x,N);
}
else
{
return 1.0/pow(x,-N);
}
}
};
方法2:递归
主要是注意n的正负,这个题比较简单了,直接递归调用就行。
1.如果 n 是负数,那么相当于求 (1/x)^(-n)。
2.如果 n 是正数 且 奇数,那么结果需要单独乘以 x
3.如果 n 是正数 且 偶数,求(x2)(n/2),一直递归下去即可。
函数代码:
class Solution {
public:
double myPow(double x, long long n) {
if (n == 0||x==1)
return 1;
if (n == 1)
return x;
if (n < 0)
return 1.0 / myPow(x, -n);
if (n % 2 == 1)
//n-1变为偶数
return x * myPow(x, n - 1);
else {
double cur = myPow(x, n / 2);
return cur * cur;
}
}
};
class Solution {
public:
double myPow(double x, long long n) {
if (n == 0||x==1)
{
return 1;
}
if (n == 1)
{
return x;
}
if (n < 0)
{
return 1.0 / myPow(x, -n);
}
double cur;
if (n % 2 == 1)
{
/*
n为奇数,返回的不是x*xcur,具体举例pow(2,7)=128。如果返回的是、
x*x*cur,是2*2*pow(2,3)=32与128不对等。所以应该是x*cur*cur即
2*pow(2,3)*pow(2,3),pow(2,3)才是真正的一半对应的n/2
*/
cur= myPow(x, n / 2);
return x*cur*cur;
}
else
{
cur= myPow(x, n / 2);
return cur * cur;
}
}
};
方法3:
函数代码:
class Solution {
public:
double myPow(double x, int n) {
if(x == 1 || n == 0)
{
return 1;
}
double ans = 1;
long num = n;
if(n < 0)
{
num = -num;
x = 1/x;
}
while(num){
if(num & 1)
{
ans *= x;
}
x *= x;
num >>= 1;
}
return ans;
}
};
本文深入探讨快速幂算法的三种实现方式,包括递归、迭代及位运算方法,详细解析算法原理,提供C++代码示例,适用于计算x的n次幂,尤其在大数据和高效运算场景中表现卓越。
594

被折叠的 条评论
为什么被折叠?



