C++ 在c+中执行递归时出现分段错误+;
当我试图用递归函数来求某个函数的幂时,会出现这个错误——“bash:line 1:7269 Segmentation fault:11”它适用于正指数,但当我输入负指数时,会出现这个错误。 以下是我的函数代码:C++ 在c+中执行递归时出现分段错误+;,c++,recursion,segmentation-fault,C++,Recursion,Segmentation Fault,当我试图用递归函数来求某个函数的幂时,会出现这个错误——“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<
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;
}
}
double整数幂(双基,整数指数)
{
如果(指数>1){
返回基数*intPower(基数,指数-1);
}否则如果(指数这将无限递归,因为减去1永远不会接近0
return 1/intPower(base,exponent-1);
也许你的意思是:
return 1/intPower(base,exponent+1);
编辑
再看一看,您可能还需要将该值乘以基数
return 1 / (base * intPower(base,exponent+1));
把它们放在一起(再加上一个例子,你就不知道了,因为你需要以不同的方式处理指数1和指数0):
double整数幂(双基,整数指数)
{
如果(指数>1){
返回基数*intPower(基数,指数-1);
}否则,如果(指数你的错误在这里,它会思考
}else if (exponent<0){
return 1/intPower(base,exponent-1);
}
}否则如果(指数我认为如果指数等于0,则应返回1.)
问题就在这句话里
return 1/intPower(base,exponent-1);
试着把它改成
return 1/intPower(base,exponent + 1);
在负指数的情况下,您需要的是
1/intPower(base, -exponent);
否则你的指数仍然是负数,从中减去一只会使它离0更远,你也会得到很多1/1/1/1/1/1/1/…在第二种情况下,你真的是说-1
吗?我想我明白了。这会使指数继续下降,但我需要使它上升。理想情况下,你应该除以指数by 2,而不是每次减法。这将有更好的复杂性。嗯,现在我得到了函数实际值的一个错误。我得到了intPower(10,-3)的.1.是的。想想你的逻辑是如何工作的。如果指数是负数,你是否曾经用基数乘以倒数来正确计算倒数?你计算倒数的次数是多少?(提示:不止一次,这也是错误的)。那么intPower(10,0)的结果是什么?它返回正确答案吗?这不起作用,因为1/intPower(base,exponent+1)仍将进入exponent<0的情况,然后您将得到一个长嵌套的1/1/1/1/1/1/base@JamilSeaidoun很好,只是在解决seg故障问题,没有意识到算法是错误的。这不起作用,因为1/intPower(基数,指数+1)仍将进入指数<0的情况,然后以长嵌套的1/1/1/1/1/1/1/1/1/基结束
1/intPower(base, -exponent);