在c ++中进行递归时出现分段错误

时间:2013-11-13 22:15:08

标签: 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<0){
        return 1/intPower(base,exponent+1);
    }else{
        return base;
    }
}

4 个答案:

答案 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 / ....