0

我正在尝试在不使用 math.h/pow() 的情况下编写递归幂函数,但我不断收到 .h 的垃圾值-1.#IND。我想我在调用 power 函数的新实例时遗漏了一些东西,但我不太明白如何绕过它。我的完整代码相当短:

#include <iostream>
using namespace std;

double power(double b, int e){
    double x;

    if(e == 0){
        x = b;
    }
    else if(b == 0){
        x = 1;
        e = 0;
    }
    else if(e < 0){
        x = (1 / b) * power(b, ++e);
    }
    else{
        x = b * power(b, --e);
    }

    return x;
}

int main(){
    double num;
    int exp;

    cout << "Please Enter Your Number: ";
    cin >> num;

    cout << "Please Enter The Explonent: ";
    cin >> exp;

    cout << power(num, exp);
    cin >> num;
}
4

3 回答 3

4

您返回值的唯一位置power是 where e==0

其他情况计算值,但从不返回它们。

于 2012-04-24T18:48:06.680 回答
3

你忘记了回报。打开编译器警告,它会抱怨。

于 2012-04-24T18:47:57.350 回答
1

您可能过早地接受了答案。您的代码仍然存在问题(2^-3 返回 .25)并且您的代码非常不理想。您应该能够轻松计算 1.000001^1000000 (它非常接近e),但是您的算法会出现段错误,因为它需要大约一百万的堆栈深度。例如,计算 a^1024 只需 10 次乘法而不是 1023 次。

于 2012-04-24T23:40:01.470 回答