0

尝试创建递归函数以查找某些东西的功能时出现此错误-“bash:第 1 行:7269 分段错误: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

4 回答 4

0

这将无限递归,因为减一永远不会接近 0

return 1/intPower(base,exponent-1);

也许你的意思是:

return 1/intPower(base,exponent+1);

编辑

再看一点,您可能还需要将该值乘以基数

return 1 / (base * intPower(base,exponent+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;
    }
}
于 2013-11-13T22:17:27.783 回答
0

你的错误就在这里,它认为。

}else if (exponent<0){
    return 1/intPower(base,exponent-1);
}

-1 应该是 +1,否则你将永远减去。

于 2013-11-13T22:17:29.933 回答
0

我认为如果指数等于 0,你应该返回 1。:)

问题出在这个语句中

return 1/intPower(base,exponent-1);

尝试将其更改为

return 1/intPower(base,exponent + 1);
于 2013-11-13T22:18:18.563 回答
0

在负指数的情况下,你想要的是

1/intPower(base, -exponent);

否则,您的指数仍然是负数,从中减去一个只会使其远离 0,而且您最终会得到很多 1/1/1/1/1/1/1/1/...。

于 2013-11-13T22:19:14.473 回答