#include
using namespace std;
//递归实现,效率不高,注意绝对值的取法。算法复杂度log(n),空间复杂度O(logn)
double GetPower(int x, int y)
{
double ret = 0;
bool small = y < 0;
y = (y^(y>>31)) - (y>>31);
if (y == 0) return 1;
if (y == 1) return x;
ret = GetPower(x, y >> 1);
ret *= ret;
if (y&1) ret *= x;
return small ? 1.0/ret : ret;
}
//非递归实现,高效率的方式。算法复杂度log(n),空间复杂度O(1)
double power(int x, int y)
{
double ret = 1;
int sign = y < 0;
y = (y^(y>>31)) - (y>>31);
while (y){
if (y&1) ret *= x;
x *=x;
y >>=1;
}
return sign ? 1.0/ret : ret;
}
int main(void)
{
int x, y;
while (cin >> x >> y){
cout << GetPower(x, y) << endl;
cout << power(x, y) << endl;
}
return 0;
}
扩展资料:
常见递归函数
1、复合算子,设f是n元函数,g1…gn是m元函数,复合算子将f,g1…gn变换成为如下的m元函数h:
h(x1…xm)=f1g1(x1,…xm),…gn(x1,…xm))
2、递归算子,设f是n元函数 (≥0),g是n+2元函数,递归算子将f,g变换成满足下列条件的h+1元函数h:
h(x1,…,xn,0)=f(x1,…xn)
h(x1,…xn,y+1)=g(x1,…xn,y,h(x1,…xn))
3、μ一算子,设f是n+1元函数,如果存在y,使f(x1,…xn,y)=0,我们以μyf(x1…xny)表示这样的y中的最小者,如果使f(x1…xny)=0的y不存在,我们说μyf(x1,…xny)无定义。μ-算子将n+1元函数f变换成下面的几元函数h
h(x1,…xn)=μyf(x1…xny)
//楼主,返回值是double吧?万一y是负数呢?比如2的-1次方,不就是0.5了吗?
#include
#include
using namespace std;
double get_power(int x,int y) throw (logic_error)
{
if(!y && !x)
throw logic_error("异常:0的0次幂"); //如果x和y都为0,0的0次幂没有意义.
else if(!y) //如果y为0,x不为0,返回1,任何非0数的0次幂都是1.
return 1;
int abs_y = y >0 ? y : (-y); //判断y是正是负,取绝对值。
double result;
if(abs_y > 1)
result = x * get_power(x, abs_y - 1);
else
result = x;
return (y > 0) ? result : (1 / result);
//如果y为负数,则取结果的倒数,如果为整数,返回结果。
}
int main()
{
try{
cout<
catch(exception& exp)
{
cout<
}
#include
using namespace std;
//递归实现,效率不高,注意绝对值的取法。算法复杂度log(n),空间复杂度O(logn)
double GetPower(int x, int y)
{
double ret = 0;
bool small = y < 0;
y = (y^(y>>31)) - (y>>31);
if (y == 0) return 1;
if (y == 1) return x;
ret = GetPower(x, y >> 1);
ret *= ret;
if (y&1) ret *= x;
return small ? 1.0/ret : ret;
}
//非递归实现,高效率的方式。算法复杂度log(n),空间复杂度O(1)
double power(int x, int y)
{
double ret = 1;
int sign = y < 0;
y = (y^(y>>31)) - (y>>31);
while (y){
if (y&1) ret *= x;
x *=x;
y >>=1;
}
return sign ? 1.0/ret : ret;
}
int main(void)
{
int x, y;
while (cin >> x >> y){
cout << GetPower(x, y) << endl;
cout << power(x, y) << endl;
}
return 0;
}
#include
using namespace std;
int GetPower(int x,int y){
int result = 1;
for(int i = 0;i < y;i++)
result *=x;
return result;
}
void main(){
int x,y;
cout<<"输入底数x和指数y:";
cin>>x>>y;
cout<<"x的y次幂为 "<
我没有编译,应该能执行吧。
别的应该也能实现啊!为啥一定要递归呢?