当我尝试使用递归函数来找到某些东西的力量时,我得到了这个错误 - “bash:line 1:7269 Segmentation fault:11”它适用于正指数,但是当我输入负数时,我得到了这个错误。 这是我的函数代码:
double intPower( double base, int exponent)
{
if(exponent>1){
return base * intPower(base,exponent-1);
}else if (exponent<0){
return 1/intPower(base,exponent+1);
}else{
return base;
}
}
答案 0 :(得分:0)
这将无限递归,因为减去一个永远不会接近0
return 1/intPower(base,exponent-1);
也许你的意思是:
return 1/intPower(base,exponent+1);
编辑
再看一下,您可能还需要将该值乘以基数
return 1 / (base * intPower(base,exponent+1));
将所有内容放在一起(并添加另外1个案例,因为你需要处理1的指数和0的指数):
double intPower( double base, int exponent)
{
if(exponent>1){
return base * intPower(base,exponent-1);
}else if (exponent<0){
return 1 / (base * intPower(base,exponent+1));
}else if (exponent==1){
return base;
}else if (exponent==0){
return 1;
}
}
答案 1 :(得分:0)
你的错误就在这里,它认为。
}else if (exponent<0){
return 1/intPower(base,exponent-1);
}
-1应该是+1,否则你将永远减去。
答案 2 :(得分:0)
我认为如果指数等于0,你应该返回1.。)
问题在于本声明
return 1/intPower(base,exponent-1);
尝试将其更改为
return 1/intPower(base,exponent + 1);
答案 3 :(得分:0)
在负指数的情况下,你想要的是
1/intPower(base, -exponent);
否则你的指数仍然是负数并从中减去一个只是使它远离0而你最终会得到很多1/1/1/1/1/1/1/1 / ....