我正在考虑这个问题,比如说我有一个幂函数的递归版本:
double pow(double base, int power){
if(power == 1 || power == 0){
return base;
}
else if(power % 2 == 0){
double result = pow(base,power/2);
return result * result;
}
else{
double result = pow(base,(power-1)/2);
return result * result * base;
}
}
我的问题是如何将此转换为while循环?
编辑:我知道这可以通过显式维护堆栈来完成,但在这种特殊情况下有没有机会不这样做?答案 0 :(得分:5)
看起来这是通过算法算法的取幂。
以下是您如何迭代地执行此操作:
double pow(double base, int power)
{
double result = 1;
while (power != 0)
{
if (power % 2 == 1)
result *= base;
power /= 2;
base *= base;
}
return result;
}
答案 1 :(得分:0)
double power(double base, int power){
if(power == 1){
return base;
}
if (power == 0)
{
return 1;
}
int absolutePower = abs(power);
double result = 1;
for (int i = 0; i < absolutePower; i++)
{
result = result * base;
}
if (power < 0)
{
result = 1/result;
}
return result;
}