Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中执行递归时出现分段错误+;_C++_Recursion_Segmentation Fault - Fatal编程技术网

C++ 在c+中执行递归时出现分段错误+;

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<

当我试图用递归函数来求某个函数的幂时,会出现这个错误——“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;
    }
}
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);